FFmepg的基本组成

一、FFmepg的基本组成

FFmpeg框架的基本组成包含AVFormat、AVCodec、AVFilter、AVDevice、AVUtil等模块库。

(1)FFmpeg的封装模块AVFormat

AVFormat实现了多媒体领域绝大数媒体封装格式,包括封装和解封装,如MP4、FLV、KV、 TS等文件封装格式,RTMP、RTSP、MMS、HLS等网络协议封装格式。FFmepg是否支持某种媒体封装格式取决于编译时是否包含了该格式的封装库。

(2)FFmpeg的编解码模块AVCodec

AVCodec包括大多数常用的编解码格式,既支持编码也支持解码。除了支持MPEG4、AAC、MJPEG等自带的媒体格式也支持H.264(x264编码器)、H.265(X265编码器)、MP3(libMP3lame编码器)。

(3)FFmepg的滤镜模块AVFilter

AVFilter库提供了一个通用的音频、视频、字幕等滤镜处理框架。在AVFilter中,滤镜框架可以有多个输入和多个输出。

(4)FFmpeg的视频图像转换计算模块swscale

swscale模块提供了高级别的图像转换API,它能够对图像进行缩放和像素格式转换。

(5)FFmpeg的音频转换计算模块swresample

swresample提供了音频重采样API,支持音频采样、音频通道布局、布局调整。

二、 FFmpeg的主要工具

(1)FFmepg的编解码工具ffmpeg

在FFmpeg官网可下载ffmpeg.exe,它可以作为命令行工具使用。如将.mp4文件转化为.avi文件,可使用如下命令。

ffmpeg -i input.mp4 output.avi

ffmpeg通过-i参数将input.mp4作为输入源,然后进行转码与转封装操作,输出到output.avi中。ffmpeg转码工作流程如下图。

 

由上图所示,ffmpeg首先读取输入源,然后通过Demuxer将音视频包进行解封装,这个动作通过调用libavformat中的接口即可实现;接着通过Decoder进行解码,将音视频通过Decoder解包为YUV或者PCM这样的数据,Decoder通过libavcodec中的接口即可实现;然后通过Encoder将对应的数据进行编码,编码可以通过libavcodec中的接口实现;接下来将编码后的音视频数据包通过Muxer进行封装,Muxer封装通过libavformat中的接口即可实现,输出成为输出流。

(2)FFmpeg的播放器ffplay

FFmpeg不但可以提供转码、转封装等功能,同时还提供了播放器相关功能,使用FFmpeg的avformat与avcodec,可以播放各种媒体文件或者流。

(3)FFmpeg的多媒体分析器ffprobe

ffprobe是一个非常强大的多媒体分析工具,可以从媒体文件或者媒体流程中获得媒体信息,比如音频的参数、视频的参数、媒体容器的参数信息等。

ffprobe -show_streams atest.mp4

三、FFmpeg编码支持

FFmpeg本身支持一些音视频编码格式、文件封装格式与流媒体传输协议,但是支持的数量有限,可依据具体需求进行定制和裁剪。

(1)查看FFmpeg所支持的音视频编码格式、文件封装格式与流媒体传输协议:

ffmpeg configure --help

(2)查看FFmpeg编码器支持

ffmpeg configure -encoders

FFmpeg支持的编码器比较全面,比如AAC、AC3、H.264、H.265、MPEG4、MPEG2VIDEO、PCM、FLV1的编码器支持。

(3)查看FFmpeg解码器支持

ffmpeg configure -decoders

decoders支持了MPEG4、H.264、H.265(HEVC)、MP3等格式。

(4)查看FFmpeg的通信协议支持

ffmpeg configure -protocols

FFmpeg支持的流媒体协议比较多,包括MMS、HTTP、HTTPS、HLS(M3U8)、RTMP 、RTP,甚至支持TCP、UDP等。

参考文献:

[1] 刘歧,赵文杰.FFmpeg从入门到精通[M].北京:机械工业出版社,2018:3-29.

猜你喜欢

转载自blog.csdn.net/qq_34623621/article/details/105995985