FFmpeg学习
FFmpeg是一个跨平台、开源的音视频处理工具,它可以对音视频进行转码、剪辑、合并、分离、解码、编码、过滤等处理操作。
基础知识
容器:即特定格式的多媒体文件,比如mp4
媒体流:表示时间轴上的一段连续数据,如一段声音数据,一段视频数据或一段字幕数据,可以是压缩的,也可以是非压缩的
数据帧/包:一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应编码器的最小处理单元。一般情况下,帧对应压缩前的数据,包对应压缩后的数据
编码器:以帧为单位实现压缩数据和原始数据之间的相互转换的
复用:把不同的流按照某种容器规则放入容器
解复用:把不同的流从某种容器中解析出来
ffmpeg/ffplay/ffprobe区别
ffmpeg:超快音视频编码器
ffplay:简单媒体播放器
ffprobe:简单多媒体流分析器
他们之间部分参数通用,部分参数不通用,在使用时需要注意
FFmpeg流程
FFmpeg模块
基本组成包括AVFormat、AVCode、AVFilter、AVDevice、AVUtil、swscale、swresample
AVFormat:实现了目前多媒体领域绝大多数媒体封装格式,包括封和解封
AVCode:对媒体格式文件做编码与解码工作
AVFilter:提供了一个通用的音频、视频、字幕等滤镜处理框架
swscale:提供了高级别的图像转换API,例如进行图像缩放和像素格式转换
swresample:提供了高级别的音频重采样API
FFmpeg命令分类
ffmpeg查询例子:ffmpeg -muxers | findstr
ffplay播放控制
1:执行ffplay xxx(中间可加参数,详细看下方),打开视频
2:在视频中按以下选项键,可进行对应操作
ffplay播放基本参数
ffplay播放高级参数
ffplay命令播放
ffplay简单过滤器
ffpmeg命令参数
例子:ffmpeg -i "xxx.mp4" -b:a 192k -ar 96000 test.mp4
ffmpeg命令提取音视频
ffmpeg命令提取PCM数据
ffmpeg命令封装