Ubuntu 16.04 上的 FFMPEG 编译失败 - 目标“libavcodec/libfdk-aacenc.o”的配方失败

sno*_*oba 5 ffmpeg

我遵循了https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu 上记录的安装步骤,并且我已经在 Ubuntu 16.04 上成功安装了支持 libfdk_aac 的 FFMPEG。最近,当我想重新设置一个新的编码生态系统时,我遇到了一个错误,如下所示:

CC libavcodec/libfdk-aacdec.o 在来自 /home/sn/ffmpeg_build/include/fdk-aac/aacdecoder_lib.h:457:0 的文件中,来自 libavcodec/libfdk-aacdec.c:20:

/home/sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:735:30: 警告:'FDKinitLibInfo' 已定义但未使用 [-Wunused-function] static FDK_AUDIO_INLINE void FDKinitLibInfo(LIB_INFO* info) { ^ /home/ sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:745:1: 警告: 'FDKlibInfo_getCapabilities' 已定义但未使用 [-Wunused-function] FDKlibInfo_getCapabilities(const LIB_INFO* info, FDK_MODULE_ID module_id) { ^

/home/sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:757:29: 警告:'FDKlibInfo_lookup' 已定义但未使用 [-Wunused-function] 静态 FDK_AUDIO_INLINE INT FDKlibInfo_lookup(const LIB_INFO* 信息,^

CC libavcodec/libfdk-aacenc.o libavcodec/libfdk-aacenc.c:在函数“aac_encode_init”中:libavcodec/libfdk-aacenc.c:293:34:错误:“AACENC_InfoStruct {aka struct }”没有名为“encoderDelay”的成员avctx->initial_padding = info.encoderDelay; ^

在来自 /home/sn/ffmpeg_build/include/fdk-aac/aacenc_lib.h:1026:0 的文件中,来自 libavcodec/libfdk-aacenc.c:20:libavcodec/libfdk-aacenc.c:在顶级:/home /sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:735:30: 警告:'FDKinitLibInfo' 已定义但未使用 [-Wunused-function] static FDK_AUDIO_INLINE void FDKinitLibInfo(LIB_INFO* info) { ^

/home/sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:745:1: 警告: 'FDKlibInfo_getCapabilities' 已定义但未使用 [-Wunused-function] FDKlibInfo_getCapabilities(const LIB_INFO* info, FDK_MODULE_ID module_id) { ^

/home/sn/ffmpeg_build/include/fdk-aac/FDK_audio.h:757:29: 警告:'FDKlibInfo_lookup' 已定义但未使用 [-Wunused-function] 静态 FDK_AUDIO_INLINE INT FDKlibInfo_lookup(const LIB_INFO* 信息,^ ffbuild/common .mak:60: 目标 'libavcodec/libfdk-aacenc.o' 的配方失败 make: *** [libavcodec/libfdk-aacenc.o] 错误 1

似乎 libfdk 或 ffmpeg 存储库上有更新导致此错误。

sno*_*oba 3

经过一番调查,我在 ffmpeg 邮件列表上找到了答案。正如http://www.ffmpeg-archive.org/ffmpeg-compilation-error-on-libfdk-acc-ubuntu16-04-td4685096.html中提到的,该错误是由于 libfdk API 的更新而引发的。目前还没有与此新版本 API 列表相匹配的 ffmpeg 版本。

在 ffmpeg 团队更新代码之前,合理的解决方案是降级 libfdk。为此,您可以在 https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu上更改 libfdk 的安装说明,如下所示:

cd ~/ffmpeg_sources && \
git -C fdk-aac pull 2> /dev/null || git clone --depth 11 https://github.com/mstorsjo/fdk-aac && \
cd fdk-aac && \
autoreconf -fiv && \
./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
make && \
make install
Run Code Online (Sandbox Code Playgroud)

请注意,我们更改了深度参数并将其设置为 11。这适用于该答案的当前日期。如果将来发布任何新的提交或发布包,您应该增加深度数字以适应可以用它编译 ffmpeg 的正确版本。

另一个解决方案反映在https://github.com/mstorsjo/fdk-aac/issues/93以及http://www.ffmpeg-archive.org/ffmpeg-compilation-error-on-libfdk-acc- ubuntu16-04-td4685096.html是关于在源代码上应用补丁的。该补丁本身可以通过https://github.com/libav/libav/commit/141c960e21d2860e354f9b90df136184dd00a9a8访问。我们必须在文本编辑器中手动打开源文件,转到路径中显示的行号,然后使用 + 添加行并使用 - 删除行。