FFmpeg的组成
FFmpeg
的组成
封装模块
AVFormat
封装格式可以理解为一种将音频流和视频流组装起来的协议,实现音频与视频的同步。如,MP4,FLV等。
AVFormat
模块实现了绝大多数的封装格式,可以进行封装和解封装。同时,可以自定义自己的封装格式。编解码模块
AVCodec
编码格式可以理解为一种将音频或者视频进行压缩的协议,减少文件大小,提高传输效率。如,MP3,H.265等。
AVCodec
模块实现了绝大多数的编码格式,可以进行编码和解码。滤镜模块
AVFilter
AVFilter
模块提供了一个通用的音频、视频、字幕等滤镜处理框架。下面是一个滤镜处理的例子.对应的命令行如下所示:
1
./ffmpeg -i INPUT -vf "split [mian][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
split
滤镜 将视频流分割,并将第二部分打上[tmp]
标签;crop
滤镜 根据给定参数,对视频进行裁剪 ;vflip
滤镜 根据给定参数,对视频进行纵坐标调换操作,打上flip
标签;overlay
滤镜 将一路输入覆盖到另一路之上,合并输出为一路视频 。视频图像转换计算模块
swscale
swscale
模块提供高级的图像转换API ,例如,可以实现1080P转720P的图片缩放, YUV转RGB的图片格式转换。音频转换计算模块
swresample
swresample
模块提供高级的音频重采样API,可以实现音频采样,音频通道布局转换等。
编解码工具ffmpeg
的使用
ffmpeg
是FFmpeg
编译后生成的一个可执行文件,下面一个例子介绍该工具的使用。
1 | ffmpeg -i input.mp4 -f avi output.avi |
该命令将MP4
格式的文件转换为AVI
格式的文件,通过-i
参数获取输入源
,通过-f
参数规定输出格式
。
ffmpeg
的主要工作流程包括:
- Demuxing(解封装)
- Decoding(解码)
- Encoding(编码)
- Muxing(封装)
转换步骤如下图
播放器工具ffplay
的使用
ffplay
也是FFmpeg
编译后生成的一个可执行文件,提供了音视频显示和播放相关的图像信息、音频的波形信息等。
多媒体分析器ffprobe
的使用
ffplay
也是FFmpeg
编译后生成的一个可执行文件,可以从媒体文件或者媒体流中获取媒体信息,比如音频的参数、视频的参数等等。