## ffmpeg学习框架 ### 三大场景 RTC 直播:推流/拉流 短视频:UGC/播放器 ### 三大工具 ffmpeg ffplay ffprobe ### 媒体类型 音频 视频 文本 ### 通用流程 ```mermaid graph LR; 输入----->处理; 处理----->输出; ``` ```mermaid graph LR; 采集---->前处理---->编码---->存储/传输; ``` 采集 = 输入 前处理 + 编码 = 处理 存储/传输 = 输出 ```mermaid graph LR; 存储/传输---->解码---->后处理---->播放; ``` 存储/传输 = 输入 解码 + 后处理 = 处理 播放 = 输出 ### 数据格式 为什么叫数据格式,跟工程上常说的数据结构有什么异同 原始数据 编码后数据 容器封装/流媒体协议 ### ffmpeg整体框架 ```mermaid graph LR; 视频---->视频输入; 视频输入---->采集; 采集---->模拟/测试/null; 采集---->摄像头; 采集---->屏幕; 视频输入---->文件input[文件]; 文件input[文件]---->抓包文件; 文件input[文件]---->常见多媒体文件input[常见多媒体文件]; 视频输入---->流式input[流式]; 流式input[流式]---->协议input[rtp/rtmp/hls]; 视频---->视频处理; 视频---->视频输出; 视频输出---->播放; 视频输出---->文件output[文件]; 文件output[文件]---->常见多媒体文件output[常见多媒体文件]; 视频输出---->流式output[流式]; 流式output[流式]---->协议output[rtp/rtmp/hls]; ``` ```mermaid graph LR; 音频---->音频输入; 音频输入---->采集; 采集---->模拟/测试/null; 采集---->麦克风; 音频输入---->文件input[文件]; 文件input[文件]---->抓包文件; 文件input[文件]---->常见多媒体文件input[常见多媒体文件]; 音频输入---->流式input[流式]; 流式input[流式]---->协议input[rtp/rtmp/hls]; 音频---->音频处理; 音频---->音频输出; 音频输出---->播放; 音频输出---->文件output[文件]; 文件output[文件]---->常见多媒体文件output[常见多媒体文件]; 音频输出---->流式output[流式]; 流式output[流式]---->协议output[rtp/rtmp/hls]; ``` ### ffmpeg百宝箱 - help命令 ![img_7.png](img_7.png) **_我是小白,你说的 xxx 是啥?它咋用?_** #### help 有哪些? 1. 帮助文档 ```Shell ffmpeg -h full ``` 2. 有哪些解/复用器 ```Shell ffmpeg -formats ##### 复用器 ffmpeg -muxers ##### 解复用器 ffmpeg -demuxers ##### 解/复用器 help 指定查询 ffmpeg -h muxer=mp4 ffmpeg -h demuxer=mp4 ``` 3. 有哪些编解码器 ```Shell ffmpeg -codecs ##### 解码器 ffmpeg -decoders ##### 编码器 ffmpeg -encoders ##### 编解码 help 指定查询 ffmpeg -h decoder=h264 ffmpeg -h encoder=libx264 ``` 4. 有哪些过滤器 ```Shell ffmpeg -filters ##### 过滤器 help 指定查询 ffmpeg -h filter=gblur ``` 5. 有哪些像素格式 ```Shell ffmpeg -pix_fmts ``` 6. 有哪些声道 ```Shell ffmpeg -layouts ``` 7. 有哪些采样率 ```Shell ffmpeg -sample_fmts ``` 8. 有哪些颜色 ```Shell ffmpeg -colors ``` 9. etc. ```Shell # 设备 ffmpeg -devices # bit流 filter ffmpeg -bsfs # 协议 ffmpeg -protocols ``` #### help 示例 1. 查询 avfoundation 用法 1. 确定avfoundation是什么? `ffmpeg -h full | grep avfoundation`,无返回 2. 那它是复用器吗?`ffmpeg -formats | grep avfoundation`,命中,`D avfoundation AVFoundation input device` 为解复用器 3. 查询用法 `ffmpeg -h demuxer=avfoundation` 2. 查询 overlay 用法 1. 确定avfoundation是什么? `ffmpeg -h full | grep overlay`,命中 > ![img_6.png](img_6.png) 2. 从结果中可知`overlay`是视频滤镜,查询用法 `ffmpeg -h filter=overlay` 3. h264 / mp3 / yuv420p etc. #### got nothing??? 1. [官方文档](https://ffmpeg.org/ffmpeg-all.html) 2. gpt 走起