什么是码率控制?
它是编码器决定为每帧视频分配多少比特的工具
码率控制有多种方式
接下来会对“1-pass”、“2-pass”、“CBR”、“VBR”、“VBV Encoding”和“CRF”做相应的介绍
可变码率
可变码率是在固定码率的基础上发展出来的,可变码率(Variable Bitate, VBR)可以确保在给定限制下使用最少的比特的情况下保持最高质量。也就是说在难编码的地方花费更多的比特,在简单的地方花费更少的比特。
码率的控制模式
以下基于ffmpeg中的x264、x265和libvpx编码器,介绍码率的控制方式
固定QP(Constant QP, CQP)
QP控制着文件压缩的大小,H.264与H.265中QP值在0-51之间的整数范围内,QP值越大压缩率越高同时质量越低,但有的编码器并没有QP值例如:libvpx编码器
1 | ffmpeg -i <input> -c:v libx264 -qp 20 <output> |
非必要不要使用QP模式,采用QP模式会导致根据场景复杂度不同比特率的波动很大,你无法控制实际的比特率
平均比特率(Average Bitrate, ABR)
给定编码器一个目标的码率,编码器计算如可达到这个码率:
1 | ffmpeg -i <input> -c:v libx264 -b:v 1M <output> |
ABR不是一种恒定码率模式,而是一种可变的码率模式。所以避免使用这个模式,因为它会在短时间内质量波动比较大
恒定码率(Constant Bitrate, CBR)
可以通过设置nal-hrd使编码器强制在特定码率
1 | ffmpeg -i <input> -c:v libx264 x264-params "nal-hrd=cbr:force-cfr=1" -b:v 1M |