FFmpeg 编码 H264 视频码率过高问题解决方法
转码 mp4 的时候发现,输出的 H264 视频流码率高达 10M kbps+,而源码率只有约 2M kbps,这明显是不对的。明明已经通过 AVCodecContext::bit_rate
字段设定了码率却没有生效。
通过这篇 wiki,找到了答案。H264 有一套很复杂的码控规范,不能简单通过一个固定的码率数值指定输出码率——H264 基本上做不到这么精确的码控。推荐做法是启用 CRF 码控,设置合适的压缩率:
1 | // 启用 CRF 码控 |
在 avcodec_open2()
之前加入上边代码块,输出视频流码率下降明显。