FFmpeg使用手册 - FFmpeg 编码支持与定制

24810阅读 0评论2016-08-18 T-Bagwell
分类:LINUX

3.1 FFmpeg本身支持一些编码、封装与协议,但是支持的依然有限,有些是因为licence,有些是因为相对来说比较大,FFmpeg所做的是提供一套基础的框架,而这些编码、封装与协议可以作为一个FFmpeg的模块挂在FFmpeg中,这些模块以第三方的外部库的方式提供支持,可以通过FFmpeg的源码的configure进行查看FFmpeg默认支持的编码、封装与协议的支持,不支持的可以再configure –help的时候查看所支持的第三方外部库,可以通过对应的参数选项进行支持:


通过上图可以看到,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,在后面的章节中会有详细介绍。

上一篇:FFmpeg使用手册 - FFmpeg 的编译安装
下一篇:FFmpeg使用手册 - FFmpeg 的常用命令