音視頻 day17 視頻錄製 - 命令行

1. 如何查看 avfoundation 支持的設備?

ffmpeg -f avfoundation -list_devices true -i ''
複製代碼
  • 輸出結果大體以下所示:
AVFoundation video devices:
[0] FaceTime HD Camera
[1] Capture screen 0
[2] Capture screen 1
AVFoundation audio devices:
[0] Built-in Microphone
複製代碼
  • 0 號設備就是 Mac 自帶的攝像頭

2. 如何看出 avfoundation 支持的參數?

ffmpeg -h demuxer=avfoundation
複製代碼
  • 輸出結果大體以下所示
AVFoundation indev AVOptions:
  -list_devices      <boolean>    .D........ list available devices (default false) -pixel_format <pix_fmt> .D........ set pixel format (default yuv420p) -framerate <video_rate> .D........ set frame rate (default "ntsc") -video_size <image_size> .D........ set video size 複製代碼

3. 錄製視頻

# 使用0號視頻設備
ffmpeg -f avfoundation -video_size 1280x720 -i 0 out.yuv
複製代碼
  • 而後你可能會遇到一個錯誤:這個設備(攝像頭)不支持29.970030的幀率。
Selected framerate (29.970030) is not supported by the device 複製代碼
  • 從新設置個 30 的幀率試試
ffmpeg -f avfoundation -video_size 1280x720 -framerate 30 -i 0 out.yuv
複製代碼

而後你會看到如下提示信息。markdown

  • 這個設備(攝像頭)不支持yuv420p
  • 只支持uyvy42二、yuyv42二、nv十二、0rgb、bgr0
  • 而且自動選擇使用uyvy422來替代yuv420p
Selected pixel format (yuv420p) is not supported by the input device.
Supported pixel formats:
  uyvy422
  yuyv422
  nv12
  0rgb
  bgr0
Overriding selected pixel format to use uyvy422 instead.
複製代碼

與此同時,也成功開始採集攝像頭的視頻數據了。ide

  • 像素格式:uyvy422
  • 分辨率:1280x720
  • 幀率:30
Input #0, avfoundation, from '0':
    Stream #0:0: Video: rawvideo, uyvy422, 1280x720
 
Output #0, rawvideo, to 'out.yuv':
    Stream #0:0: Video: rawvideo, uyvy422, 1280x720, 30 fps

複製代碼
  • 播放錄製好的YUV。
ffplay -video_size 1280x720 -pixel_format uyvy422 -framerate 30 out.yuv
複製代碼
相關文章
相關標籤/搜索