音视频 day13 手动编译FFmpeg

514 阅读2分钟

1. AAC 是什么?目前 MP3 已经如此流行,为什么还会出现 AAC?

  • AAC(Advanced Audio Coding,高级音频编码),是由Fraunhofer IIS、杜比实验室、AT&T、Sony、Nokia 等公司共同开发的有损音频编码和文件格式
  • AAC:编码方面以较小的文件大小提供更高的质量,解码方面需要较少的处理能力

2. AAC LC 到 AAC HE V2 的发展历程?(了解即可)

image.png

image.png

3. 什么是编码器?什么是解码器?常见的 ACC 编解码器是哪两个?

  • 如果想对 PCM 数据进行AAC 编码压缩,那么就要用到 AAC 编码器(encoder)
  • 如果想将 AAC 编码后的数据解压出 PCM 数据,那么就要用到 AAC 解码器(decoder)
  • ffmpeg_aac 和 fdk_aac

4. 下载 FFMpeg 的源代码

image.png

5. 手动编译 ffmpeg 的命令如下:

// 先保证如下库已经安装

  • brew install yasmbrew install sdl2brew install fdk-aacbrew install x264brew install x265 // 到 FFmpeg 的源码文件夹中,运行如下命令
./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --enable-gpl  --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265
// 用以指定编译好的 FFmpeg 安装到哪个目录
--prefix=/usr/local/ffmpeg
// 生成动态库
--enable-shared
// 不生成静态库
--disable-static
// x264、x265 要求开启GPL License
--enable-gpl
// fdk-aac 与 GPL 不兼容,需要通过开启 nonfree 进行配置
--enable-nonfree
// 将 fdk-acc 内置到 FFmpeg 中
--enable-libfdk-aac
// 将 x264 内置到 FFmpeg 中
--enable-libx264
// 将 x265 内置到 FFmpeg 中
--enable-libx265
  • 你可以通过 configure --help 命令查看每一个配置项的作用
  • 最后运行 make install 或者 sudo make install 完成手动编译FFmpeg

6. 通过如下命令验证我们手动编译 FFmpeg 成功,并且成功集成了 fdk_aac

ffmpeg -ar 44100 -ac 2 -f s16le -i 44100_s16le_2.pcm -c:a libfdk_aac out.aac

7. 卸载原来用 brew 安装的 FFMpeg

brew uninstall ffmpeg

8. 将 ffmpeg 相关命令配置到环境变量 path 中

  • 找到 open ~/.bash_profile 文件,写入如下内容
export FFMpeg=/usr/local/ffmpeg
export PATH=$FFMpeg/bin:$PATH
  • 让配置生效 source ~/.bash_profile
  • 然后重新打开一个命令行工具,直接输入 ffmpeg 可以有提示,即表示成功

9. 什么是 Makefile 文件?

  • Makefile 描述了整个项目的编译和链接等规则,可以使得项目的编译变得自动化,不需要每次都手动输入一堆源文件和参数
  • 比如哪些文件需要编译?哪些文件不需要编译?哪些文件需要先编译?哪些文件需要后编译?等等

10. 思考 ffmpeg 是如何找到 fdk_aac 库的呢?

  • otool -L libavcodec.dylib

image.png

image.png