## ffmpeg工具手册
// 常见功能应该可以快速链接到底下的详细功能模块
### 常见功能及简介
#### 视频
[视频输入 - 采集](#video-cap)
视频输入 - 文件:
视频输入 - 流式:
视频处理 - 提取:
视频处理 - 转码:
视频处理 - 拼接:
视频处理 - 截取:
视频处理 - 裁剪:
视频处理 - 融合:
视频处理 - 变速:
视频处理 - 水印:
视频处理 - 抽帧:
视频输出 - 播放:
视频输出 - 文件:
视频输出 - 流式:
#### 音频
[音频输入 - 采集](#audio-cap)
音频输入 - 文件:
音频输入 - 流式:
音频处理 - 提取:
音频处理 - 转码:
音频处理 - 拼接:
音频处理 - 截取:
音频处理 - 融合:
音频处理 - 变速:
音频输出 - 播放:
音频输出 - 文件:
音频输出 - 流式:
### 功能详细介绍
#### 采集
mac: avfoundation
##### 常用参数
1. `-list_devices ` 用于查看设备支持的采集设备列表
> 示例及输出:
> `ffmpeg_thin -f avfoundation -list_devices true -i ''`
> [AVFoundation indev @ 0x7fe5ae905a80] AVFoundation video devices:
> [AVFoundation indev @ 0x7fe5ae905a80] [0] FaceTime高清摄像头(内建)
> [AVFoundation indev @ 0x7fe5ae905a80] [1] Capture screen 0
> [AVFoundation indev @ 0x7fe5ae905a80] AVFoundation audio devices:
> [AVFoundation indev @ 0x7fe5ae905a80] [0] MacBook Pro麦克风
2. `-capture_raw_data` 是否捕获原始设备数据。默认值为 0
> -c copy
3. `-drop_late_frames` 是否丢弃比期望晚的视频帧,默认值为 true
4. `-capture_cursor` 是否捕获鼠标指针,默认值为 0,即不捕获
5. `-capture_mouse_clicks` 是否捕获屏幕鼠标点击。默认值为 0
#### [视频输入 - 采集](#video-cap-title)
##### 常用参数、参数含义及常用取值
1. `-video_device_index` 指定视频采集设备
2. `-fixel_format` 指定视频采集的像素格式,默认是 yuv420p,如果采集时没有指定,且采集设备不支持默认,会默认选择支持列表的第一条作为默认值
> [avfoundation @ 0x7fe78f204300] Supported pixel formats:
> [avfoundation @ 0x7fe78f204300] uyvy422
> [avfoundation @ 0x7fe78f204300] yuyv422
> [avfoundation @ 0x7fe78f204300] nv12
> [avfoundation @ 0x7fe78f204300] 0rgb
> [avfoundation @ 0x7fe78f204300] bgr0
3. `-vframes` 视频帧数
4. `-framerate` / `-r` 指定视频帧率, 默认是 ntsc, 60ifps
> i 代表隔行扫描,p 代表逐行扫描
> 
5. `-video_size` / `-s` 指定视频帧宽高
> 
6. `-vcodec` / `-codec:v` / `-c:v` 指定视频的编码格式,默认是 libx264
7. `-b:v` 视频码率
8. `-aspect` 设置宽高比例 (4:3, 16:9 or 1.3333, 1.7777)
9. `-vf` 视频过滤器 (scale, crop, split)
10. `-vn` 不处理视频
##### 不常用参数/不常用参数取值,如何通过help获取
##### 常见实例:相较简单的场景
```Shell
##### 将视频设备 0 中的视频和音频设备 0 中的音频录制到 out.avi 中
ffmpeg -f avfoundation -i "0:0" out.avi
##### 将视频设备 2 中的视频和音频设备 1 中的音频录制到 out.avi 中
ffmpeg -f avfoundation -video_device_index 2 -i ":1" out.avi
##### 使用像素格式 bgr0 从系统默认视频设备录制视频,并且不将任何音频录制到 out.avi 中
ffmpeg -f avfoundation -pixel_format bgr0 -i "default:none" out.avi
```
##### 使用中常见的error,原因及解决方法
#### [音频输入 - 采集](#audio-cap-title)
##### 常用参数、参数含义及常用取值
1. `-audio_device_index` 指定视频采集设备
2. `-aframes` 音频帧率
3. `-b:a` 音频码率
4. `-ar` 采样率
5. `-ac` 声道
6. `-acodec` / `-codec:a` / `-c:a` 音频编码器 (libmp3lame, copy 保留原始编码方式)
7. `-af` 音频过滤器
8. `-an` 不处理音频
##### 不常用参数/不常用参数取值,如何通过help获取
#### 视频输出 - 播放
#### 音频输出 - 播放
### 常见使用需求或复杂使用场景
// 应该有一个每个需求如何详细展示的例子,需要包含命令和其他什么?
#### 音频
录制一段音频
播放一段音频
播放PCM格式音频
边采集边播放音频
mp4提取音频,格式WAV
WAV格式音频转成PCM格式
音频变速
播放抓包文件
音频格式转码
抽取pcm数据
播放rtp流
重采样pcm数据
合并多个文件 - 转码
合并多个文件 - 非转码
推流,转推流,24小时循环文件推流
#### 视频
录制一段摄像头视频
录制一段屏幕视频
播放一段视频
播放YUV格式视频
播放h264格式视频
边采集边播放视频
mp4提取视频,格式YUV
拼接视频片段
视频变速
间隔1s提取视频帧换面,保存为图片
截取视频片段
添加时间水印,自定义位置,颜色,大小
视频指定分辨率转码
加水印
抽取264数据
播放抓包文件
视频格式转码
播放rtp流
视频文件加字幕
合并多个文件 - 转码
合并多个文件 - 非转码
推流,转推流,24小时循环文件推流
截取视频中的某些帧,并存储成图片
截取直播流片段
直播添加水印
#### ffprobe
查看视频关键帧间隔,查看pts,dts
查看文件元信息