问题背景
最近在linux上学习使用ffmpeg,想使用ffmpeg来录制音频。一般音频使用的是aac编码,据说libfdk_aac比ffmpeg默认的aac编码器要好,尝试使用libfdk_aac编码器来进行编码。
我的ffmpeg是通过apt install ffmpeg的方式来进行安装的。默认没有启用libfdk_aac。那么我尝试自己编译ffmpeg试试。
问题解决过程
- 先尝试自己编译ffmpeg,那么需要先安装libfdk_aac对应的依赖项。我这里,宁可多装,也不要少装,所以把几个和fdk, aac相关的库,都安装了一遍。
sudo apt install libfdk-aac-dev libfdk-aac1 fdkaac aac-enc
安装完成之后,再编译ffmpeg
./configure --enable-shared --disable-static --enable-debug=3 --enable-libfdk-aac
make -j8
sudo make install
然后,运行
ffmpeg -i xx.mp4 -vn -c:a libfdk_aac -ar 44100 -channel 2 -profile:a aac_he_v2 1.aac
结果还是提示Unknown encoder ‘libfdk_aac’,中间有个提示:
WARNING: library configuration mismatch。 我想应该是原来的ffmpeg和自己编译的冲突了。
- 尝试卸载原来的所有ffmpeg相关内容。
dpkg -l | grep ffmpeg
然后把这里所有列出来的包,全都通过dpkg -r 卸载掉,然后通过dpkg --purge 彻底卸载掉。
先后卸载了 ffmpeg, libffmpegthumbnailer-dev, libffmpegthumbnailer4v5, libxine2-ffmpeg,然后再运行之前的 命令
ffmpeg -i xx.mp4 -vn -c:a libfdk_aac -ar 44100 -channel 2 -profile:a aac_he_v2 1.aac
调用成功。
问题原因
那么导致这个问题,就2个原因:
- 默认的ffmpeg,没有启用libfdk_aac,这个通过自己安装libfdk_aac相关的开发环境,编译ffmpeg解决。
- 之前的ffmpeg包,与我们自己编译的ffmpeg包有一些不匹配的,删除掉原来的ffmpeg相关的包。