1.前言
FFMPEG是特别强大的专门用于处理音视频的开源库。可以使用它的API对音视频进行处理,也可以使用它提供的工具,如ffmpeg(编解码工具),ffplay(播放器),ffprobe(内容分析工具),来编辑你的音视频文件。
2.FFmpeg基本概念
音、视频流:在音视频领域,我们把一路音/视频称为一路流。如我们小时候经常使用VCD美国大片时,在里边可以选英语和国语,其实就是CD视频文件中存放了两路音频流,用户可以选择一路进行播放。
容器:我们一般把MP4、FLV、MOV等文件称之为容器。也就是这些常用格式文件中,可以存放多路音频文件。以MP4为例,就可以存放一路视频流,多路音频流,多路字幕流。
channel:channel是音频中的概念,称之为声道。在一路音频流中,可以有单声道,双声道或立体声。
3.ffmpeg工作流程
ffmpeg的主要工作流程,具体如下:
1. 解封装(Demuxing)
2. 解码(Decoding)
3. 编码(Encoding)
4. 封装(Muxing)
其中需要经过6个步骤,具体如下:
1).读取输入源
2).进行音视频解封装
3).解码每一帧音视频数据
4).编码每一帧音视频数据
5).进行音视频的重新封装
6).输出目标
ffmpeg整体处理的工作流程和步骤图:
由图的工作流程可以看出,ffmpeg首先读取输入源;然后通过Demuxer将音视频包进行解封装,这个动作通过调用libavformat中的接口即可实现;接下来通过Decoder进行解码,将音视频通过Decoder解包成为YVU或者PCM这样的数据,Decoder通过libavcodec中的接口即可实现;然后通过Encoder将对应的数据进行编码,编码可以通过libavcodec中的接口来实现;接下来将编码后的音视频数据包通过Muxer进行封装,Muxer封装通过libavformat中的接口即可实现,输出称为输出流。
4.FFmpeg目录及其作用
libavcodec:提供一系列编码器的实现。
libavformat:实现在流协议,容器格式及其IO访问。
libavfilter:包括了hash器,解码器和各类工具函数。
libavfilter:提供了各种音视频过滤器。
libavdevice:提供了访问捕获设备和回访设备的借口。
libwresample:实现了婚音和重采样。
libswscale:实现了色彩转换和缩放功能。
5.FFmpeg命令分类
1.基本信息查询
2.录制
3.分解/复用
4.处理原始数据
5.滤镜
6.切割与合并
7.图/视互转
8.直播相关