FFmpeg介绍
什么是FFmpeg?
FFmpeg既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,提供了丰富的命令行工具,以及音视频处理的调用接口。
FFmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码,多种协议的流媒体,多种色彩格式转换,多种采样率转换,多种码率转换等。
FFmpeg历史
FFmpeg是法国天才程序员在2000年开发出初版,后面发展到2004年,由另外一人接手。
2011年,FFmpeg项目中一些提交者对FFmpeg的项目管理方式不满,因而创建另一个项目Libav。但是Libav并没有FFmpeg那么流行,相反,FFmpeg维护者从Libav中移植了大量代码和功能到FFmpeg。
可以说二者就是兄弟。
FFmpeg的基本组成
FFmpeg框架的基本组成包含AVFormat,AVCodec,AVFilter,AVDevice,AVUtil等模块库。
结构如图所示:
-
AVFormat:FFmpeg的解封装模块
AVFormat中实现了目前多媒体领域的绝大多数媒体解封装格式,如:MP4,FLV,KV,TS等文件封装格式,RTMP,RTSP,MMS,HLS等网络协议封装格式。
FFmpeg是否支持某种媒体封装格式,取决于编译时是否包含该格式的封装库。可以根据需要扩展。 -
AVCodec:编解码模块
AVCodec中实现了目前多媒体领域绝大多数常用的编解码格式。除了支持MPEG4,AAC,MJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,如H.264(AVC)编码,需要使用x264编码器,H.265(HEVC)编码等等。 -
AVFilter:滤镜模块
AVFilter提供了一个通用的音频,视频字幕等滤镜处理框架。 -
swscale:视频图像转换计算模块
swscale模块提供了高级别的图像转换API,例如它允许进行图像缩放和像素格式转换。 -
swresample:音频转换计算模块
swresample模块提供了高级别的音频重采样API。例如它允许操作音频采样,音频通道布局转换与布局调整。