1.8 FFmpeg编码支持与定制
1.8 FFmpeg编码支持与定制
FFmpeg
本身支持一些音视频编码格式、文件封装格式与流媒体传输协议,但是支持的数量依然有限,FFmpeg
所做的只是提供一套基础的框架,所有的编码格式、文件封装格式与流媒体协议均可以作为FFmpeg
的一个模块挂载在FFmpeg
框架中。这些模块以第三方的外部库的方式提供支持,可以通过FFmpeg
源码的configure
命令查看FFmpeg
所支持的音视频编码格式、文件封装格式与流媒体传输协议,对于FFmpeg
不支持的格式,可以通过configure--help
查看所需要的第三方外部库,然后通过增加对应的编译参数选项进行支持。帮助信息内容输出如下:
通过以上帮助信息的输出内容可以看到,FFmpeg
所支持的外部库相对来说比较多,主要包含如下列表:
这些外部库可以通过configure
进行定制,在编译好的FFmpeg
可执行程序中也可以看到编译时定制的FFmpeg
的外部库:
例如需要自己配置FFmpeg
支持哪些格式,比如仅支持H.264
视频与AAC
音频编码,可以调整配置项将其简化如下:
命令行执行后的输出内容如下:
省略…
1.8.2 FFmpeg的解码器支持
FFmpeg
源代码本身包含了很多的解码支持,解码主要是在输入的时候进行解码,也可以理解为将压缩过的编码进行解压缩,关于解码的支持,可以通过./configure-list-decoders
命令来进行查看:
从上面的输出信息中可以看到FFmpeg
所支持的解码器模块decoders
支持了MPEG4
、H.264
、H.265(HEVC)
、MP3
等格式。
1.8.3 FFmpeg的封装支持
FFmpeg
的封装(Muxing
)是指将压缩后的编码封装到一个容器格式中,如果要查看FFmpeg
源代码中都可以支持哪些容器格式,可以通过命令./configure--list-muxers
来查看:
从封装(又称复用)格式所支持的信息中可以看到,FFmpeg
支持生成裸流文件,如H.264
、AAC
、PCM
,也支持一些常见的格式,如MP3
、MP4
、FLV
、M3U8
、WEBM
等。
1.8.4 FFmpeg的解封装支持
FFmpeg
的解封装(Demuxing)
是指将读入的容器格式拆解开,将里面压缩的音频流、视频流、字幕流、数据流等提取出来,如果要查看FFmpeg
的源代码中都可以支持哪些输入的容器格式,可以通过命令./configure--list-demuxers
来查看:
从解封装(Demuxer
,又称解复用)格式支持信息中可以看到,FFmpeg
源代码中已经支持的demuxer
非常多,包含图片(image
)、MP3
、FLV
、MP4
、MOV
、AVI
等。
1.8.5 FFmpeg的通信协议支持
FFmpeg
不仅仅支持本地的多媒体处理,而且还支持网络流媒体的处理,支持的网络流媒体协议相对来说也很全面,可以通过命令./configure--list-protocols
查看:
从协议的相关信息列表中可以看到,FFmpeg
支持的流媒体协议比较多,包括MMS
、HTTP
、HTTPS
、HLS(M3U8)
、RTMP
、RTP
,甚至支持TCP
、UDP
,其也支持使用file
协议的本地文件操作和使用concat
协议支持的多个文件串流操作,后面的章节中会有详细的介绍。