全称——Fast Forward Moving Picture Experts Group
提供多种媒体格式的封装和解封,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等。
基本组成
AVFormat——封装模块。FFmpeg是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。根据实际需求,可进行媒体封装格式的拓展,增加自己定制的封装格式,即在AVFormat中增加自己的封装处理模块。
AVCodec——编解码模块。H.264(AVC)编码,需要使用x264编码器;H.265(HEVC)编码,需要使用x265编码器;MP3(mp3lame)编码,需要使用libmp3lame编码器实现了目前多媒体领域绝大多数常用的编解码格式,既支持编码,也支持解码,还支持第三方的编码器。
AVFilter——滤镜模块。滤镜框架可以有多个输入或多个输出。提供了一个通用的音频、视频、字幕等滤镜处理框架。
swscale模块——视频图像转换计算模块。常见于将图像从1080p转换成720p或者480p等的缩放,或者将图像数据YUV420p转换成YUYV,或者TUV转RGB等图像格式转换。还提供高级别的图像转换API,允许进行图像缩放和像素格式转换。
swresample——音频转换计算模块。提供高级别的音频重采样API。
主要工作流程:
(1)解封装
(2)解码
(3)编码
(4)封装
步骤:
(1)读取输入源
(2)进行音视频的解封装
(3) 解码每一帧音视频数据
(4)编码每一帧音视频数据
(5)进行音视频的重新封装
(6)输出到目标
基本语法:
ffmpeg <global-optionals> <input-options> -i <input> <output-options> <output>
全局参数:日志输出,文件覆盖等全局选项
输入文件:读取文件的输入选项
输出文件:转换、过滤、流映射(自动检测视频拓展并将其转换为适当的编解码器)
高频命令行参数:
\-c :指定编码器
-c copy :直接赋值,不经过重新编码
-c:v :指定视频编码器
-c:a :指定音频编码器
-i:指定输入文件
输出质量:
-b:比特率(单位时间内传输的比特数量)
-r:改变帧频(每秒钟播放的帧数)
-s:分辨率
-an:去除音频流
-vn:去除视频流
-preset:指定输出的视频质量,会影响文件的生成速度。
-y:不经过确认,输出时直接覆盖同名文件
-vf:创建过滤图用于旋转、缩放、亮度和对比度的修改
例:使用ffmpeg命令将test.mp4推送到本地rtsp服务器。
ffmpeg -re -stream_loop -1 -i test.mp4 -rtsp_transport tcp -c copy -f rtsp rtsp://127.0.0.1:554/live/test
-re:以实时速率读取流
-stream_loop -1:循环播放
-i :指定输入文件
-rtsp_transport tcp :指定rtsp传输协议为TCP
-c copy :不对视频流进行重新编码,而是直接复制
-f rtsp :输出格式为rtsp
使用VLC进行播放
Filtering and streamcopy cannot be used together.
哦吼!发生了水平翻转!
ffmpeg -re -stream_loop -1 -i test.mp4 -rtsp_transport tcp -f rtsp -vf hflip rtsp://127.0.0.1:554/live/test
-vf hflip :应用hflip视频滤镜来水平翻转视频
-vf pad=2*iw :扩展视频的尺寸,水平和垂直方向均变为输入的2倍
-vf scale=iw/2:ih/2 :尺寸变为输入的一半
ffmpeg -re -stream_loop -1 -i test.mp4 -i Cat.jpg -rtsp_transport tcp -f rtsp -filter_complex overlay=W-w:H-h rtsp://127.0.0.1:554/live/test
相关术语:
媒体流:表示在时间轴上的一段连续的数据。
数据帧/数据包:通常一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编码器的最小处理单元,分属于不同媒体流和原始数据之间相互转换的。
流媒体服务:流媒体服务是一种允许用户通过互联网访问并即时欣赏音频、视频和其他多媒体的技术和服务。将媒体内容压缩成数据包,然后在网络上以连续流动的形式传输给用户,无需用户事先完整地下载整个媒体文件。流媒体技术的应用使得用户可以在线观看电视节目、电影、广播和现场活动,而且通常只需要一个稳定的互联网连接即可。流媒体服务可以支持实时的播放或点播,并且在某些情况下,可能还需要特定的软件来访问特定的内容。
启动时间短,速度快,对系统缓存容量要求低等特点。
①顺序流式传输:顺序下载,通过HTTP服务发送文件,用户在下载文件的同时可观看在线媒体,但不能跳到未下载的部分,适合短片段传输。(点播技术)
①实时流式传输:实时传送,需专用流媒体服务器和RTP传输协议,支持用户随机访问,可随意快进或后退。
H.264(AVC)与H.265(HEVC)都是视频压缩格式,由于视频本身的码流太大,所以需要经过压缩然后再通过网络进行传输。
H.265进一步提高压缩比,提高效率,节约带宽或存储空间。