刘士敬 пре 1 година
родитељ
комит
1f6ccc80b2
9 измењених фајлова са 166 додато и 57 уклоњено
  1. BIN
      cap.mkv
  2. 63 37
      ffmpeg工具手册.md
  3. 103 20
      ffmpeg整体学习框架.md
  4. BIN
      img_3.png
  5. BIN
      img_4.png
  6. BIN
      img_5.png
  7. BIN
      img_6.png
  8. BIN
      img_7.png
  9. BIN
      out.png

+ 63 - 37
ffmpeg工具手册.md

@@ -1,21 +1,17 @@
 ## ffmpeg工具手册
 
-
-
 // 常见功能应该可以快速链接到底下的详细功能模块
 
 ### 常见功能及简介
 
 #### 视频
 
-视频输入 - 采集:
+<a id="video-cap-title">[视频输入 - 采集](#video-cap)</a>
 
 视频输入 - 文件:
 
 视频输入 - 流式:
 
-
-
 视频处理 - 提取:
 
 视频处理 - 转码:
@@ -34,28 +30,20 @@
 
 视频处理 - 抽帧:
 
-
-
 视频输出 - 播放:
 
 视频输出 - 文件:
 
 视频输出 - 流式:
 
-
-
-
-
 #### 音频
 
-音频输入 - 采集:
+<a id="audio-cap-title">[音频输入 - 采集](#audio-cap)</a>
 
 音频输入 - 文件:
 
 音频输入 - 流式:
 
-
-
 音频处理 - 提取:
 
 音频处理 - 转码:
@@ -68,53 +56,95 @@
 
 音频处理 - 变速:
 
-
-
 音频输出 - 播放:
 
 音频输出 - 文件:
 
 音频输出 - 流式:
 
-
-
 ### 功能详细介绍
 
-#### 视频输入 - 采集    TODO
-
-常用参数及参数含义
-
-参数常用取值
-
-常见实例:相较简单的场景
+#### 采集
 
-使用中常见的error,原因及解决方法
+mac: avfoundation
 
-不常用参数/不常用参数取值,如何通过help获取
+##### 常用参数
 
+1. `-list_devices <true|false>` 用于查看设备支持的采集设备列表
+   > 示例及输出:  
+   > `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
 
+#### <a id="video-cap">[视频输入 - 采集](#video-cap-title)</a>
 
-#### 音频输入 - 采集
+##### 常用参数、参数含义及常用取值
 
+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,原因及解决方法
 
+#### <a id="audio-cap">[音频输入 - 采集](#audio-cap-title)</a>
 
+##### 常用参数、参数含义及常用取值
 
+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获取
 
+#### 视频输出 - 播放
 
+#### 音频输出 - 播放
 
 ### 常见使用需求或复杂使用场景
 
@@ -152,8 +182,6 @@ WAV格式音频转成PCM格式
 
 推流,转推流,24小时循环文件推流
 
-
-
 #### 视频
 
 录制一段摄像头视频
@@ -206,8 +234,6 @@ mp4提取视频,格式YUV
 
 直播添加水印
 
-
-
 #### ffprobe
 
 查看视频关键帧间隔,查看pts,dts

+ 103 - 20
ffmpeg整体学习框架.md

@@ -1,7 +1,5 @@
 ## ffmpeg学习框架
 
-
-
 ### 三大场景
 
 RTC
@@ -10,8 +8,6 @@ RTC
 
 短视频:UGC/播放器
 
-
-
 ### 三大工具
 
 ffmpeg
@@ -20,8 +16,6 @@ ffplay
 
 ffprobe
 
-
-
 ### 媒体类型
 
 音频
@@ -30,8 +24,6 @@ ffprobe
 
 文本
 
-
-
 ### 通用流程
 
 ```mermaid
@@ -62,28 +54,18 @@ graph LR;
 
 播放 = 输出
 
-
-
 ### 数据格式
 
 为什么叫数据格式,跟工程上常说的数据结构有什么异同
 
-
-
 原始数据
 
 编码后数据
 
 容器封装/流媒体协议
 
-
-
-
-
 ### ffmpeg整体框架
 
-
-
 ```mermaid
 graph LR;
     视频---->视频输入;
@@ -125,15 +107,116 @@ graph LR;
     流式output[流式]---->协议output[rtp/rtmp/hls];
 ```
 
+### ffmpeg百宝箱 - help命令
 
+![img_7.png](img_7.png)
 
+**_我是小白,你说的 xxx 是啥?它咋用?_**
 
+#### help 有哪些?
 
+1. 帮助文档
 
+```Shell
+ffmpeg -h full
+```
 
-### ffmpeg百宝箱 - help命令
+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???
 
-TODO
+1. [官方文档](https://ffmpeg.org/ffmpeg-all.html)
+2. gpt 走起