x264 vbv-maxrate与vbv-bufsize对码率控制
- 同一个1080p视频,同一x264参数,控制单一变量vbv-bufsize
# 以下测试均使用这一参数进行编码
crf=20:ref=5:bframes=8:keyint=250:min-keyint=1:vbv-maxrate=3500:vbv-bufsize=3500:preset=veryslow:profile=high:level=4.1:b-adapt=2:direct=auto:deblock=-1,-1:analyse=all:me=umh:merange=24:subme=10:trellis=2:psy-rd=1.0.15:rc-lookahead=60
- vbv-maxrate :单位片段,最大平均码率
- vbv-bufsize :单位片段,最大码率振幅(肤浅理解)(保留高动态片段中的细节)
vbv-maxrate=3500 vbv-bufsize=3500
vbv-maxrate=3500 vbv-bufsize=1000
vbv-maxrate=3500 vbv-bufsize=500
结论
- [峰值码率] <= [vbv-maxrate] + [vbv-bufsize]
- [平均码率] <= [vbv-maxrate]
建议(3种方案)
1、质量为达到最优,不建议设置vbv参数,只设置crf=18-21就好了
2、在保证质量较好,又想码率更低
- [vbv-maxrate] = 推荐【1080p:3000-12000】【720p:2000-5000】
- 当发现视频质量糊化明显,应适当提高maxrate,保证观影体验
- 建议 [vbv-bufsize] = 1.25*[vbv-maxrate]
- [vbv-bufsize]越大,动态范围较大的视频质量较好
- [vbv-maxrate]控制整个视频的平均码率,也决定了视频体积的大小
3、严格控制峰值码率【不建议使用,除非要实时推流】
- [峰值码率] <= [vbv-maxrate] + [vbv-bufsize]
- 例如:当[vbv-bufsize] < [vbv-maxrate],高动态片段开始糊化,[vbv-bufsize]越低,糊化越严重
原画 vs 压缩(vbv-maxrate=3500 vbv-bufsize=500)
相对静态
上:原画;下:压缩
现象:区别不大
相对动态
上:原画;下:压缩
现象:船上的栏杆糊了、远处上桥的人形边缘也糊了(这就是bufsize太低,没法保留动态细节的原因)