ffmpeg是我们进行视频编解码常用的工具,而对于ffmpeg中编码时对码率的控制方式一直没找合适的教程,无意中在stackoverflow上发现了答案,在此进行总结备忘。
视频编码器常用的码率控制方式包括abr(平均码率),crf(限制码率),cqp(固定质量),ffmpeg中AVCodecContext显示提供了码率大小的控制参数,但是并没有提供其他的控制方式。ffmpeg中码率控制方式分为以下几种情况:
1.如果设置了AVCodecContext中bit_rate的大小,则采用abr的控制方式;
2.如果没有设置AVCodecContext中的bit_rate,则默认按照crf方式编码,crf默认大小为23(此值类似于qp值,同样表示视频质量);
3.如果用户想自己设置,则需要借助av_opt_set函数设置AVCodecContext的priv_data参数。下面给出三种控制方式的实现代码: