Open9

FFMPEGメモ

NoboNoboNoboNobo

Windows編

バックエンドフレームワークは一般に「 dshow」

NoboNoboNoboNobo

サポートデバイス一覧

動作例

> ffmpeg -hide_banner -f dshow -list_devices true -i ""   
[dshow @ 0000022ec0d07180] "USB Video" (video)
[dshow @ 0000022ec0d07180]   Alternative name "@device_pnp_\\?\usb#vid_534d&pid_2109&mi_00#7&adea634&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 0000022ec0d07180] "HD Pro Webcam C920" (video)
[dshow @ 0000022ec0d07180]   Alternative name "@device_pnp_\\?\usb#vid_046d&pid_082d&mi_00#7&2247c63&1&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 0000022ec0d07180] "OBS Virtual Camera" (video)
[dshow @ 0000022ec0d07180]   Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{A3FCE0F5-3493-419F-958A-ABA1250EC20B}"
[dshow @ 0000022ec0d07180] "マイク (HD Pro Webcam C920)" (audio)
[dshow @ 0000022ec0d07180]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{01BCBAF0-1D2D-43DE-ABFD-281573E14036}"
[dshow @ 0000022ec0d07180] "デジタル オーディオ インターフェイス (USB Digital Audio)" (audio)
[dshow @ 0000022ec0d07180]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{826D0DF7-9431-4757-B794-5116C1C5E5D4}"
[dshow @ 0000022ec0d07180] "ライン入力 (High Definition Audio Device)" (audio)
[dshow @ 0000022ec0d07180]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{9D0B2DCF-18B9-4D39-B34F-3045E57A2C71}"
[dshow @ 0000022ec0d07180] "マイク (Steam Streaming Microphone)" (audio)
[dshow @ 0000022ec0d07180]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{BB969357-BF98-4E78-A3D8-50AA2F85A8D4}"
[in#0 @ 0000022ec0d0be40] Error opening input: Immediate exit requested
Error opening input file .
NoboNoboNoboNobo

macOS編

バックエンドフレームワークは「avfoundation」

NoboNoboNoboNobo

サポートデバイス一覧

動作例

% ffplay -hide_banner -f avfoundation -list_devices true -i dummy  
2025-02-24 10:40:31.777 ffplay[91991:3274359] WARNING: Add NSCameraUseContinuityCameraDeviceType to your Info.plist to use AVCaptureDeviceTypeContinuityCamera.
[AVFoundation indev @ 0x7fd63b022ac0] AVFoundation video devices:
[AVFoundation indev @ 0x7fd63b022ac0] [0] FaceTime HDカメラ(内蔵)
[AVFoundation indev @ 0x7fd63b022ac0] [1] Capture screen 0
[AVFoundation indev @ 0x7fd63b022ac0] AVFoundation audio devices:
[AVFoundation indev @ 0x7fd63b022ac0] [0] MacBook Airのマイク
dummy: Input/output error
NoboNoboNoboNobo

Linux編

バックエンドフレームワークは「v4l2」

NoboNoboNoboNobo

サポートデバイス一覧

ビデオに関して、v4l-utilsパッケージをインストールし、「v4l2-ctl」を利用するのが一般的
動作例

> v4l2-ctl --list-devices

オーディオに関して、alsaまたはpulseaudio関連ツールを利用するのが一般的

NoboNoboNoboNobo

ジェネリックな話

  • 殆どの環境で「ffmpeg」パッケージがあり、これをインストールするとffplayとffprobeもインストールされる
  • バナーはffmpegのビルド条件を確認したい場合以外で不要なので「-hide_banner」が常にあると見やすい
  • 「-re」をつけると、実時間で入力を読み込む(ファイルから読むときに実デバイスのような入力になる)
  • 「-v 0」をつけるとほぼ出力がサイレントになるがトラブルシュートがわかりにくくなるのでつけるのは最後
  • 入力の「-」は「pipe:0」を指定するのと同等
  • 出力の「-」は「pipe:1」を指定するのと同等
NoboNoboNoboNobo

複数フォーマットでの出力

例:「ffmpeg <入力の処理> -f tee -map 0:v -map 0:a "[f=hls]playlist.m3u8|[f=mpegts]-"」
N:1や1:Nの場合、複数ストリーム(ビデオ&オーディオなど)を扱う場合、自動グラフ構成に失敗しがちなのでmapで出力Stream番号指定が必要な場合が多い。

NoboNoboNoboNobo

各種コーデックの関係

  • MPEG4AudioとAACは互換があるっぽい
  • VP8/9ビデオやOpusオーディオなどのコンテナとしてWebMやMatroskaがある
  • MatroskaはWebMを拡張し、幅広いコーデックのストリームを内包できる
  • HLSはmp4またはMPEG-TSの細切れファイルをm3u8プレイリストに収める
  • MPEG-TSにはH264やAACが基本だけど、ほかのコーデックでもある程度載る(が、再生系が対応している必要はある)
  • MPEG-TSは「188」バイトサイズに区切られていて、UDPに載せるときは「188x7」バイト単位
  • RTPはもうちょっと低レベルなプロトコルで単独のストリームしか載らない