如何设置编码器参数—FFmpeg API教程
作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音
编码器 (encode)的参数也是分为 通用部分 跟 私有部分。通用部分是指大部分编码器都有的属性,例如码率就是通用的。通用部分的参数是在 avcodec_options 变量里面的,如下:

也可以通过 ffmpeg.exe -h > t.txt 来查看通用部分,如下:

编码器私有部分的参数可以通过以下命令查询:
ffmpeg.exe -h decoder=libx264
ffmpeg.exe -h encoder=libx264

无论是通用还是私有属性,都是使用 AVDictionary 来设置的,就是最后一个参数 AVDictionary **options,如下:
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
下面通过一个例子来演示如何设置编码器参数,本文代码可在 GitHub 下载:

上图中,演示了两种设置编码器属性的方法,一种是直接赋值各个字段,例如 pix_fmt, color_range 就是采用第一种方法。
第二种是通过 AVDictionary 来设置,传递进去 avcodec_open2() 函数里面即可,libx264 的 preset 默认是 medium 的,我把他改成 superfast (超级快)。
[!NOTE]
avcodec_open2()函数如果使用了AVDictionary的值,就会删除掉,例如avcodec_open2()函数执行完之后,preset这个值就会从AVDictionary里删除。
最后使用完之后,需要调 av_dict_free() 来释放 AVDictionary 的内存。
解码器参数的设置 跟编码器参数设置是类似,照葫芦画瓢就行。解码器的参数通常比较少。
广告:本人罗上文现在是声网的渠道合作商,各位如果有需要使用声网的产品,请通过我的渠道邀请链接注册,我会给与一定的优惠折扣。欢迎加我微信Loken1咨询。
