模仿网站的二压三压机制
shanaencoder吧
全部回复
仅看楼主
level 7
PIo🌛 楼主
自己写了个码率判断脚本,压缩过程用crf模式,压缩完毕后会分类新视频,原视频,核心思想只有一条,就是在新视频不通过的时候尽可能保留原视频。
最早的时候这个机制很简单,就是单纯判断新码率是否大于码率线,但后面机制就复杂了,比如老视频如果小于新视频,但新视频的码率还低于码率线,这时候也应该不通过。
新视频可能是不完整视频需要判断,新视频的分辨率不能大于原视频,等等
之后我还引入了赦免机制,如果新视频大于原视频,但原视频已经低于码率线的0.45倍了,这时候原视频被赦免为“无需压缩的视频”,新视频被删除。
这个机制的引入让之前的情况更加复杂,我需要判断新旧视频的编码效率问题,如果原视频的编码效率大于新视频,那么更倾向于保留原视频,这就涉及到动态生成码率线了,这种动态也不完美,因为它完全基于新视频与原视频之间的编码代差
2024年12月03日 04点12分 1
level 7
PIo🌛 楼主
单机贴吧
2024年12月03日 11点12分 2
level 7
我压片喜欢用稳定的码率,所以我基本不用crf。
通常,好视频我用cpu/hevc的2pass,一般视频用nvenc_hevc的P7/vbr。
我是准备自己写个gui,针对调用ffmpeg/shanaencoder进行cpu/2pass的。
1、1pass用crf,压完判断视频码率;
2、如果1pass视频码率满足要求,转码就结束。
3、如果1pass视频码率不满足要求,进入正常的2pass。
东西都准备到位了,就是现在实在没时间动手写程序了。。。
另外,扩展还想通过局部测试crf,就是通过转视频中间几分钟长度,找出码率接近目标的crf值,对了,其实crf不一定整数,小数如24.1/24.7都可以的。
2024年12月03日 15点12分 3
@zbzbs 我和你的差不多只是第二次压缩会用更低配的crf模式,而不是用2pass模式,我的设想是通过差值占新视频码率的比值动态给出第二次crf的值,虽然不够精准,多试几次就行了,而且次数越大给的参数越激进,质量越低
2024年12月04日 02点12分
level 2
shanaencoder,你就是用CPU压HEVC也是没有2pass的。NVENC的话有变通的方法,那就是Slow级别,自带2pass。强制上2pass的话只有用命令行了,或者用其他GUI。crf模式指定的数值,CPU压制可以有小数点,GPU只有整数。crf指定的数值对于编码器来说只是一个量化参考,并不是每一帧都用你给出的数值去量化,而是运动块多时自动升高量化参数,运动块少时降低量化参数,关键帧自动降低量化参数,非关键帧自动升高量化参数。你设的这个值只是一个升高或者降低时,所依据的基础值。所以用crf,不同的视频,相同的量化参数和时长分辨率等,出来的大小可能天差地别。我的经验就是至少要压制中段视频10分钟,才能预估出大概的码率与大小,要准确一点,可能需要20分钟甚至30分钟,而且也不能保证预估会不会出现意外。阿凡达就是最好的栗子,有些片段会出现码率暴增的问题,我用29的crf参数,码率都能爆上六七千,而有些片段,码率可以掉下一千……预估它的最终压制大小简直要了我的老命(没办法,播放器只支持FAT32磁盘格式,必须保证电影最终大小小于4GB)……所以后面我找了最佳的方法,就是NVENC用slow级别,vbr码率模式,简直就是完美的平衡。
2024年12月04日 04点12分 4
@tstxwwzj 我只是简单观察,所以认为这属于cqp,可能确实不属于,但是我每次看日志结果都是波动非常小的q值,不过现在好像记错了,我看的似乎是x264的,x265就没用过2pass[呵呵]
2026年01月03日 23点01分
我并不用2pass,因为这本身就是一个精准码率控制下的cqp,我更喜欢符合人眼敏感度的crf模式,这能让我的压缩效果最大化,最多就是少数视频不符合要求,调整参数重复压缩几次,时间消耗上肯定低于2pass,因为它假定我所有视频都要压缩两次
2024年12月04日 06点12分
我估计你是回错人了
2024年12月04日 06点12分
@PIo🌛 至少nvenc的slow+vbr不是基于cqp,而是crf的。在shanaencoder编码时,看其动态Q值,其变化是类似于crf的,和cqp模式下Q值的变化方式完全不一样。所以我才说nvenc的slow配上vbr是完美的平衡。根本不需要不停的转码折腾,一次出片……
2024年12月05日 11点12分
1