什么是ffmpeg
ffmpeg即使一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口
ffmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等; ffmpeg框架提供了多种丰富的插件模块,包含封装和解封装的插件、编码与解码的插件等
ffmpeg的基本组成
ffmpge框架的基本组成包括:AVFormet、AVCodec、AVFilter、AVDevice、AVUtil
等模块库:
-
封装模块
AVFormet
:AVFormet
中实现了目前多媒体领域中的绝大多数多媒体封装格式,包括封装和解封装,比如MP4、FLV、KV、TS
等文件封装格式;RTMP、RTSP、MMS、HLS
等网络协议封装格式。FFmpge
是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。- 根据实际需求,可以进行媒体封装格式的扩展,增加自己定制的封装格式、也就是说在AVFormet中增加自己的封装处理模块
-
编解码模块
AVCodec
AVCodec
中实现了目前多媒体领域中绝大多数常用的编解码格式。AVCodec
除了支持MPEG4、AAC、MJPEG
等自带的媒体编解码格式之外,还支持第三方的编解码器,比如x264编码器支持的H.264(AVC)
编码;x265编码器支持的H.265(AVC)
编码;libmp3lame
编码器支持的MP3
(mp3lame)编解码- 如果希望增加自己的编码格式,或者硬件编解码,则需要在AVCodec中增加相应的编解码模块
-
滤镜模块
AVFilter
AVFilter
库提供了一个通用的音频、视频、字幕等滤镜处理框架。
-
视频图像转换计算模块
swscale
swscale
模块提供了高级别的图像转换API
-
音频转换计算模块
swresample
swresample
模块提供了高级别的音频重采样API
工具
测试用的小视频下载地址: https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_30mb.mp4
编解码工具ffmpeg
ffmpeg是FFmpeg
源代码编译后生成的一个可执行程序,其可以作为命令行工具使用。
-i
/-f
选项
ffmpeg -i input.mp4 output.avi
ffmpet -i input.mp4 -f avi output.dat
ffmpeg通过-i
参数将input.mp4
作为输入源输入、然后进行转码和封装操作,输出到output.avi
中。这条命名主要之类如下工作
- 获取输入源
input.mp4
- 转码
- 输出文件
output.avi
-f
参数限制了输出文件的容器格式
ffmpeg的主要工作流程比较简单,具体如下:
- 解封装
- 解码
- 编码
- 封装
其中需要经过六个步骤
- 读取输入源
- 进行音视频的解封装
- 解码每一帧音视频的数据
- 编码每一帧音视频的数据
- 进行音视频的重新封装
- 输出到目标
ffmpet rtsp切图
ffmpeg -i rtmp://58.200.131.2:1935/livetv/cctv1 -y -f mjpeg -t 0.001 -s 1280x720 test.jpg
多媒体分析器ffprobe
ffprobe
也是ffmpeg源码编译后生成的一个可执行程序。ffprobe是一个非常强大的多媒体封装工具,可以从媒体文件或者媒体流中获取你想要了解的格式媒体信息,比如音频的参数、视频的参数、媒体容器的参数信息等
./ffprobe --show_streams output.mp4
http://bbs.apehorde.com/blog/articles/152
http://linux.51yip.com/search/ffmpeg