1.3 FFmpeg的基本组成
1.3 FFmpeg的基本组成
FFmpeg
框架的基本组成包含AVFormat
、AVCodec
、AVFilter
、AVDevice
、AVUtil
等模块库。
下面针对这些模块做一个大概的介绍。
(1)FFmpeg的封装模块AVFormat
AVFormat
中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,如:
MP4
、FLV
、KV
、TS
等文件封装格式
,RTMP
、RTSP
、MMS
、HLS
等网络协议封装格式
。
FFmpeg
是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。根据实际需求,可进行媒体封装格式的扩展,增加自己定制的封装格式,即在AVFormat
中增加自己的封装处理模块。
(2)FFmpeg的编解码模块AVCodec
AVCodec
中实现了目前多媒体领域绝大多数常用的编解码格式,既支持编码,也支持解码。AVCodec
除了支持MPEG4
、AAC
、MJPEG
等自带的媒体编解码格式之外,还支持第三方的编解码器,如:
H.264(AVC)
编码,需要使用x264编码器;H.265(HEVC)
编码,需要使用x265编码器;MP3(mp3lame)
编码,需要使用libmp3lame
编码器。
如果希望增加自己的编码格式,或者硬件编解码,则需要在AVCodec
中增加相应的编解码模块,关于AVCode
的更多相关信息以及使用信息将会在后面的章节中进行详细的介绍。
(3)FFmpeg的滤镜模块AVFilter
AVFilter
库提供了一个通用的音频、视频、字幕等滤镜处理框架。在AVFilter
中,滤镜框架可以有多个输入和多个输出。我们参考下面这个滤镜处理的例子,如图1-2所示。
图1-2所示样例中的滤镜处理将输入的视频切割成了两部分流,一部分流抛给crop
滤镜与vflip
滤镜处理模块进行操作,另一部分保持原样,当crop
滤镜与vflip
滤镜处理操作完成之后,将流合并到原有的overlay
图层中,并显示在最上面一层,输出新的视频。对应的命令行如下:
1 | ./ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT |
下面看一下具体的执行情况,以验证该命令的可行性:
这部分命令比较复杂先省略,后面看懂了的话再更新吧!