

通过上图可以看到,FFmpeg支持的外部库相对来说比较多,主要包含如下列表:
bzip2 1.0.6 <
Fontconfig 2.11.94 <
Frei0r 20130909-git-10d8360 <
GnuTLS 3.3.15 <
libiconv 1.14 <
libass 0.12.2 <
libbluray 0.8.1
libbs2b 3.1.0 <
libcaca 0.99.beta18 <
dcadec 20150506-git-98fb3b6 <
FreeType 2.5.5 <
Game Music Emu 0.6.0 <
GSM 1.0.13-4 <
iLBC 20141214-git-ef04ebe <
Modplug-XMMS 0.8.8.5 <
LAME 3.99.5 <
OpenCORE AMR 0.1.3 <
OpenJPEG 1.5.2 <
Opus 1.1 <
RTMPDump 20140707-git-a1900c3 <
Schroedinger 1.0.11 <
libsoxr 0.1.1 <
Speex 1.2rc2 <
Theora 1.1.1 <
TwoLAME 0.3.13 <
vid.stab 0.98 <
VisualOn AAC 0.1.3 <
VisualOn AMR-WB 0.1.2 <
Vorbis 1.3.5 <
vpx 1.4.0 <
WavPack 4.75.0 <
WebP 0.4.3
x264 20150223-git-121396c
x265 1.7 <
XAVS svn-r55 <
Xvid 1.3.3 <
XZ Utils 5.2.1 <
zlib 1.2.8 <
这些外部库可以通过configure进行定制,命令行如下:

如果不需要这么多配置选项,只是想支持H264视频与AAC音频编码,可以讲配置项简化为如下:

如图所示,如果要支持H264与AAC,需要系统中包括libx264与libfaac的第三方库进行支持,否则会出现错误提示:

未找到libfaac错误提示

未找到libx264错误提示
如果需要支持H265编码,可以与支持h265基本类似,从前面的help信息中可以看到,只需要增加—enable-libx265即可支持h265编码,其他对应的编码类似。
FFmpeg默认支持的编码、封装与协议相对比较多,所以编译出来的FFmpeg体积比较大,在有些应用场景中并不需要FFmpeg所支持的一些编码、封装或者协议,可以通过configure --help查看到一些有用的裁剪操作:

可以通过这些选项关闭掉不需要用到的编码、封装与协议等模块,验证方法如下:

disable掉所有的模块后,可以看到ffmpeg的编译配置项输出信息几乎为空:

Disable所有的模块之后,可以根据定制,支持上自己所需要的模块,例如希望支持h264视频编码、aac音频编码、封装为mp4,则可以通过如下方式进行支持:

配置后输出的编译配置信息如下:

支持h264、aac编码与mp4封装的FFmpeg编译配置参数
从图中可以看到,FFmpeg已经支持了h264编码、aac编码与mp4封装格式的支持。这样通过编译后生成的ffmpeg即是配置裁剪过的ffmpeg,体积会比默认编译的ffmpeg小很多。
3.2 FFmpeg 的编码器支持
FFmpeg源代码中可以包含的编码非常多,常见的,不常见的都可以在编译配置列表中见到,可以通过使用编译配置命令configure --list-encoders参数来查看:

从图中可以看出,ffmpeg支持的encoder比较全面,比如aac、ac3、h264、h265、mpeg4、mpeg2video、pcm、flv的编码器支持。
3.3 FFmpeg 的解码器支持
FFmpeg源代码中本身包含了很多的解码支持,解码主要为输入的时候进行的解码,也可以理解为将压缩过的编码进行解压缩,关于解码的支持,可以通过./configure –list-decoders命令来进行查看:

从图中可以看到ffmpeg所支持的解码器模块decoders,支持了mpeg4、h264、h265(HEVC)、mp3等。
3.4 FFmpeg 的复用(Muxing)支持
FFmpeg的复用为将压缩后的编码封装到一个容器格式中(又叫Muxing),如果要查看FFmpeg源代码中都可以支持哪些容器格式,可以用过命令./configure --list-muxers查看:

从图中可以看到,ffmpeg支持生成裸流文件,例如h264、aac、pcm,也支持一些常见的格式,例如mp3、mp4、flv、hls、webm等。
3.5 FFmpeg的解复用(Demuxing)支持
FFmpeg的解复用为将读入的容器格式拆解开,将里面的压缩的音频流、视频流、字幕流、数据流等等提取出来(又叫Demuxing),如果要查看FFmpeg的源代码中都可以支持哪些输入的容器格式,可以通过命令./configure --list-demuxers 查看:

从图中可以看到,ffmpeg源码中已经支持的demuxer非常多,包含图片(image)、mp3、flv、MP4、mov、avi等。
3.6 FFmpeg 的通信协议支持
FFmpeg不仅仅支持本地的多媒体处理,而且还支持网络流媒体的处理,支持的网络流媒体协议相对来说也很全面,可以通过命令 ./configure --list-protocols 进行查看:

从图中可以看到,ffmpeg支持的流媒体协议比较多,包括mms、http、hls(M3U8)、rtmp、rtp、甚至支持tcp、udp,也支持本地文件file协议,和多个文件拼接串流的支持concat,在后面的章节中会有详细介绍。