## 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 代表逐行扫描 > ![img_5.png](img_5.png) 5. `-video_size` / `-s` 指定视频帧宽高 > ![img_4.png](img_4.png) 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 查看文件元信息