LoginSignup
5
1

FFmpegでよく使うオプション備忘録(windows)

Last updated at Posted at 2021-12-07

コマンドライン構文

ffmpeg -f [format] 入力 -f [format] 出力
出力は複数あってもいい

muxとdemux

光通信関連でよく見るが、ffmpegのドキュメントでもよく出てくる。複数のストリームを一つにまとめるのがmux、逆がdemux

-list_devices true

カメラを一覧で出すときに使う

Windowsに接続したカメラ
ffmpeg -list_devices true -f dshow -i dummy

-list_options true

出力例
ffmpeg -f dshow -list_options true -i video="USB Camera"
[dshow @ 00000299226cdf40] DirectShow video device options (from video devices)
[dshow @ 00000299226cdf40]  Pin "キャプチャ" (alternative pin name "0")
[dshow @ 00000299226cdf40]   vcodec=mjpeg  min s=1920x1080 fps=15 max s=1920x1080 fps=30
[dshow @ 00000299226cdf40]   pixel_format=yuyv422  min s=640x480 fps=15 max s=640x480 fps=30
[dshow @ 00000299226cdf40]  Pin "キャプチャ" (alternative pin name "1")
[dshow @ 00000299226cdf40]   vcodec=h264  min s=1920x1080 fps=15 max s=1920x1080 fps=30

ここではvcodecmjpegh264があり、このUSBカメラはh264のハードウェアエンコードに対応していることがわかる。

pixel_format=yuyv422は無圧縮のrawデータに対応していることを示している。422は色情報を意味する

444>420のように数字が大きいほど色再現性が高い。

Pin "キャプチャ" の行は入力コーデックを選択するときに使う-video_pin_nameの値を指定するときに使う

pinでコーデックを選択
ffprobe -f dshow -video_pin_name 1 -i video="USB Camera"

-re || -readrate 1

ファイルをストリームするときとかに使う

ffmpegはCPUが可能な限り最大の速度で次のフレームを読み取ろうとするので、このオプションなしでストリームを作ると早送りされた動画みたいになる

sample.mp4を元のフレームレートでストリーミング
ffmpeg -re -i .\sample.mp4 -an -c:v hevc_qsv -f rtp rtp://localhost:6004

stream_loop -1

一つのファイルを無限にループして処理する。指定しないと最後のフレームを処理してffmpegが終了する

sample.mp4をストリーミング
ffmpeg -re -stream_loop -1 -i .\sample.mp4 -an -c:v hevc_qsv -f rtp rtp://localhost:6004

-rtbufsize

バッファサイズを指定する。バッファが大きいとストリーミングで遅延する。小さいと溢れてパケロスする。良い塩梅が難しい

2GBiバッファ
ffmpeg -rtbufsize 2048M -f dshow -i video="Game Capture 4K60 S+" -f rtp rtp://localhost:5004

-r

入力および出力でのフレームレート指定。

10fpsのRTPストリーミング
ffmpeg -f dshow -i video="Game Capture 4K60 S+" -r 10 -f rtp rtp://localhost:5004

-s

解像度指定。入力と出力両方で使える

FullHDストリーミング
ffmpeg -f dshow -i video="Game Capture 4K60 S+" -s 1920x1080 -c:v h264_nvenc -f rtp rtp://localhost:5004

-f dshow

windowsで使うやつ。directshowのデバイスが扱える

-codec:v (== -c:v) -codec:a (== -c:a)

出力用
指定したのコーデックにトランスパイルする。copyにするとそのまま出力される

Webカメラからの出力をトランスパイルせずにそのまま出力
ffmpeg -f dshow -i video="Game Capture 4K60 S+" -vcodec copy -an 

-g

Iフレーム間のフレーム枚数が決まります。I/B/PフレームのまとまりをGOPといいます。シーンチェンジが少ない動画では値を大きくすると圧縮率があがります

-sdp_file

SDPファイルを出力する。SDPファイルはストリームのコーデックやフレームレート等を相手に伝えるためのファイルです。WebRTCでも使われるやつですね。

sdpサンプル
v=0
o=- 0 0 IN IP6 ::1
s=柔道トップ選手のトレーニングが過激すぎた
c=IN IP6 ::1
t=0 0
a=tool:libavformat 58.51.101
m=audio 3000 RTP/AVP 97
b=AS:768
a=rtpmap:97 PCMU/48000/2
example
ffmpeg -i .\Videos\Captures\sample.mp4  -vn -f rtp rtp://localhost:3000 -sdp_file sdp.file

ffprobe

ストリーム入力のコーデックを調べるときに使う

ffprobe -i rtsp://192.168.80.242:8554/video

Input #0, rtsp, from 'rtsp://192.168.80.242:8554/video':
  Metadata:
    title           : Session streamed with GStreamer
    comment         : rtsp-server
  Duration: N/A, start: -0.033333, bitrate: N/A
    Stream #0:0: Video: h264 (High), yuvj420p(pc, smpte170m, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 90k tbn, 120 tbc
5
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1