欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

FFmpeg的基本组成(一)

程序员文章站 2022-07-13 13:23:11
...

1.FFmpeg的基本组成

FFmpeg框架的基本组成包含AVFormatAVCodecAVFilterAVDeviceAVUtil等模块库。
下面针对这些模块做一个大概的介绍。

(1)FFmpeg的封装模块AVFormat

AVFormat中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,如:

  • MP4FLVKVTS文件封装格式,

  • RTMPRTSPMMSHLS网络协议封装格式

FFmpeg是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。根据实际需求,可进行媒体封装格式的扩展,增加自己定制的封装格式,即在AVFormat中增加自己的封装处理模块。

(2)FFmpeg的编解码模块AVCodec

AVCodec中实现了目前多媒体领域绝大多数常用的编解码格式,既支持编码,也支持解码。AVCodec除了支持MPEG4AACMJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,如:

  • H.264(AVC)编码,需要使用x264编码器;

  • H.265(HEVC)编码,需要使用x265编码器;

  • MP3(mp3lame)编码,需要使用libmp3lame编码器。

如果希望增加自己的编码格式,或者硬件编解码,则需要在AVCodec中增加相应的编解码模块,关于AVCode的更多相关信息以及使用信息将会在后面的章节中进行详细的介绍。

(3)FFmpeg的滤镜模块AVFilter

AVFilter库提供了一个通用的音频、视频、字幕等滤镜处理框架。在AVFilter中,滤镜框架可以有多个输入和多个输出。我们参考下面这个滤镜处理的例子,如图1-2所示。
FFmpeg的基本组成(一)
图1-2所示样例中的滤镜处理将输入的视频切割成了两部分流,一部分流抛给crop滤镜与vflip滤镜处理模块进行操作,另一部分保持原样,当crop滤镜与vflip滤镜处理操作完成之后,将流合并到原有的overlay图层中,并显示在最上面一层,输出新的视频。对应的命令行如下:

//画面镜像翻转
# ./ffmpeg -i input.mp4 -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" output.mp4

 

相关标签: FFmpeg