macOS上编译FFmpeg

FFmpeg资料

FFmpeg Github

FFmpeg官网

macOS上编译FFmpeg

下载FFmpeg源码

$ git clone git@github.com:FFmpeg/FFmpeg.git
1

执行FFmpeg源码的configure命令,检测环境。

$ cd FFmpeg
$ ./configure
1
2
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
1

出现以上的错误信息,表示需要安装版本较新的yasm。

# 通过yasm源码进行安装
$ wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
$ tar -xvf yasm-1.3.0.tar.gz
$ cd yasm-1.3.0
$ ./configure
$ make
$ make install
1
2
3
4
5
6
7
# 通过Homebrew安装yasm
# 如果Homebrew中收录的yasm版本过低,那还是需要通过源码进行安装
$ brew install yasm
1
2
3

检测yasm是否安装成功。

$ which yasm
/usr/local/bin/yasm

$ yasm --version
yasm 1.3.0
Compiled on Oct 23 2018.
Copyright (c) 2001-2014 Peter Johnson and other Yasm developers.
Run yasm --license for licensing overview and summary.
1
2
3
4
5
6
7
8

再次执行FFmpeg源码的configure命令,yasm的错误信息已消除,但出现如下警告信息:

WARNING: pkg-config not found, library detection may fail.
1

直接使用Homebrew安装pkg-config。

$ brew install pkg-config
1
$ pkg-config --version
0.29.2
1
2

再次执行FFmpeg源码的configure命令,一切正常,并输出当前配置下FFmpeg支持的库、程序、encoder、decoder、muxer、demuxer、filter、protocol等信息。

利用Homebrew安装sdl2以支持FFmpeg中的ffplay工具。

$ brew install sdl2
1

编译安装FFmpeg。

cd FFmpeg
$ make
$ make install
1
2
3
$ which ffmpeg
/usr/local/bin/ffmpeg

$ which ffplay
/usr/local/bin/ffplay

$ which ffprobe
/usr/local/bin/ffprobe
1
2
3
4
5
6
7
8

FFmpeg定制

FFmpeg本身支持一些音视频编码格式、文件封装格式与流媒体传输协议,但支持的数量有限。

FFmpeg只是提供一套基础的框架,所有的编码格式、文件封装格式与流媒体协议等都可以作为FFmpeg的一个模块挂载在其框架中。

这些模块以第三方外部库的方式提供支持,可以通过FFmpeg源码的configure命令查看FFmpeg所支持的编码格式、文件封装格式与流媒体协议等。

  • ./configure:FFmpeg的整体支持情况。

  • ./configure --list-encoders:FFmpeg支持的编码器。

  • ./configure --list-decoders:FFmpeg支持的解码器。

  • ./configure --list-muxers:FFmpeg支持的封装。

  • ./configure --list-demuxers:FFmpeg支持的解封装。

  • ./configure --list-protocols:FFmpeg支持的通信协议。

  • ./configure --list-filters:FFmpeg支持的滤镜。

对于FFmpeg不支持的格式,可以通过configure --help查看所需要的第三方外部库,然后通过增加对应的编译参数选项(--enable-*系列选项)进行支持。

# 仅支持H.264视频与AAC音频编码
$ ./configure --enable-libx264 --enable-libfdk-aac --enable-gpl --enable-nonfree
1
2

FFmpeg默认支持的格式较多,最终编译出来的包体积较大,可通过--disable-*系列的参数选项来关闭业务上不需要用到的模块。

$ ./configure --disable-videotoolbox
1

本人的FFmpeg定制

首先,通过Homebrew安装所需的依赖库。

$ brew install pkg-config
$ brew install sdl2
$ brew install yasm
$ brew install lame
$ brew install fdk-aac
$ brew install libass
$ brew install speex
$ brew install x264
$ brew install x265
$ brew install libbluray
1
2
3
4
5
6
7
8
9
10

执行FFmpeg源码的configure命令,并提供自定义的安装配置。

$ ./configure --enable-fontconfig --enable-gpl --enable-libass \
--enable-libbluray --enable-libfreetype --enable-libmp3lame \
--enable-libspeex --enable-libx264 --enable-libx265 \
--enable-libfdk-aac --enable-version3 --enable-cross-compile \
--enable-nonfree --enable-videotoolbox --enable-audiotoolbox
1
2
3
4
5