FFmpeg 支持很多音视频格式的编解码,其中一部分是通过第三方库支持的。这些第三方支持的编解码,默认是不开启的。比如视频的 h264, 音频的 opus(ffmpeg 有个原生的 opus,但是编码只支持 48K).
以 opus 为例,讲一下如何让 ffmpeg 支持第三方库。
- 首先查看当前版本是否支持 opus,如果现在就支持,那就啥都不用改啦。
ffmpeg -codecs | grep opus
- 查看 ffmpeg 源码是否支持 opus
进入 ffmpeg 源码目录,执行:
./configure --list-encoders | grep opus
可以看到除了原生的 opus 外,还支持一个 libopus。
- 安装 opus 库
ffmpeg 要使用第三方库,需要先安装第三方库,再配置 ffmpeg,在生成 ffmpeg 库的时候依赖该库。
下载 libopus 源码,并执行./configure
, make
, make install
三步曲,libopus 就安装成功了。
- 配置 ffmpeg 库,开启 libopus
在 ffmpeg 源码目录,执行 ./configure
时,增加参数:--enable-libopus --enable-encoder=libopus
其中 libopus
就是 ./configure --list-encoders
时看到的那个名字。--enable-libopus
表明生成 ffmpeg 时,使用 libopus 库。--enable-encoder
表明开启名字为 ’libopus’ 的编码器。
然后 make
,make install
就能更新 ffmpeg 支持 libopus 了。
重新执行./configure --list-encoders | grep opus
,得到下图:
可以看见 encoders 和 decoders 后面都增加了 libopus。现在就可以用新的 libopus 进行非 48K 的编码了。
- 如果 ffmpeg 库还要发给别人呢
如果确定 ffmpeg 的功能不需要改,把 ffmpeg 和第三方库的头文件,库文件从 /usr/local/ 下找出来发过去就 OK。
不过,万一哪天别人需要加个 h264 呢。别人高高兴兴的编了个带 h264 的版本替换进去(他不知道现在有 opus 啊,说不定还有别的什么这个那个库)。完蛋!不知道过了多久,终于有人发现音频功能出问题了。
所以./configure 的参数也应该放到版本里。别人加 h264 的时候,就在这个参数上进行添加。
改完一编译,又完蛋。因为 opus 库安装在我们本地,还记得吗?别人电脑上没有呀。我们把 opus 库的 include 和 lib 放到版本库下,再在 ffmpeg 的./configure 参数里,指定第三方库的目录。指定方法如下:
--extra-cflags="-I 库路径 /include" --extra-cxxflags="-I 库路径 /include"
--extra-ldflags="-L 库路径 /lib"
并指定 ffmpeg 的安装目录,指定方法如下:
--prefix=ffmpeg 版本库里的安装目录
这样就能愉快的使用配置了第三方库的 ffmpeg 了。
注:mac 系统可能还会遇到动态库签名和绝对路径的问题,目前没研究明白,这里就不说了。