基本组成
-
AVFormat: 包含绝大多数的媒体封装格式,封装和解封装(编译enable)
-
AVCodec: 包含绝大多数的编解码格式(第三方要另外安装,比如x264, libfdk_aac等)
-
AVFilter: 音频,视频,字幕等滤镜处理模块,可以有多个输入输出,e.g, crop flip使用的是同一个滤镜处理线性链,split和overlay使用的另一个滤镜处理线性链,可以理解为第一个分号,把视频流拆成2部分,第一部分标签main,第二部分叫tmp;第二个分号,把tmp作为输入,通过crop和vflip处理后,放到flip的标签里,第三个分号则是把main标签和flip标签合并作为输入,输出到output里面,最后完成镜像的效果
ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
-
视频图像计算模块swscale: 图像缩放和像素格式转换的功能
-
音频转换模块swresample: 音频采样,音频通道布局转换,布局调整
ffmpeg工作流程
- 读取文件
- 解封装 Demuxer
- 解码 Decoder
- 转换参数 Encoder
- 封装 Muxer
- 写入文件
FFmpeg的编解码工具ffmpeg
-
主要注意格式就行
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... ffmpeg [全局参数] [[输入文件参数] -i [输入文件]] [[输出文件参数] [输出文件]]
FFmpeg的播放器ffplay
- FFmpeg提供播放各种流和媒体文件(avformat, avcodec), ffplay需要SDL-2支持才能完整使用
FFmpeg多媒体分析器ffprobe
- 多媒体分析工具可以查询以下信息:
- 音频参数(编码格式)
- 视频参数 (编码格式)
- 媒体容器的参数信息(时长,复合码率)
- 媒体文件中每个包长度,类型,帧的信息等
build from source
-
我只需要mp4,h264,libfdk_aac,其他的暂时不需要,指定如下编译选项
./configure --disable-filters --disable-encoders --disable-decoders --disable-hwaccels --disable-muxers --disable-demuxers --disable-parsers --disable-bsfs --disable-protocols --disable-indevs --disable-devices --enable-libx264 --enable-libfdk_aac --enable-gpl --enable-nonfree --enable-muxer=mp4
-
安装完毕,查看编码器,解码器,封装,解封装和通讯协议的支持
./configure --list-encoders ./configure --list-decoders ./configure --list-muxers ./configure --list-demuxers ./configure --list-protocols
常用命令
-
查看ffmpeg的格式和支持情况
-
查询支持情况
ffmpeg -formats | grep aac .. or mp4 or webm ffmpeg -codes | grep h264 ffmpeg -encoders | grep libx264 ffmpeg -filters | grep h264 ffmpeg -h muxer=flv ffmpeg -h demuxer=flv ffmpeg -h encoder=h264 ffmpeg -h decoder=h264
-
常见使用
- 提取音频
ffmpeg -i source.mp4 -vn -c:a copy target.aac
- 格式转化
ffmpeg -i source.rmvb -vcodec mpeg4 -b:v 200k -r 15 -an target.mp4
- 调整码率
ffmpeg -i source.mp4 -minrate 964K -maxrate 3856K -bufsize 2000K target.mp4
- 改分辨率
ffmpeg -i source.mp4 -vf scale=480:-1 target.mp4
(1080p -> 480p) - 视频截图
ffmpeg -y -i source.mp4 -ss 00:01:24 -t 00:00:01 target.jpg
- 裁剪视频
ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]
- 提取音频