USBカメラのリストを出す
以下のコマンドで、デバイス名が "USB2.0 UVC PC Camera"
であることがわかる。
> ffmpeg -hide_banner -list_devices true -f dshow -i nul
[dshow @ 000001c74c0f9180] DirectShow video devices (some may be both video and audio devices)
[dshow @ 000001c74c0f9180] "USB2.0 UVC PC Camera"
[dshow @ 000001c74c0f9180] Alternative name "@device_pnp_\\?\usb#vid_a16f&pid_0304&mi_00#7&37e7878e&2&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 000001c74c0f9180] DirectShow audio devices
[dshow @ 000001c74c0f9180] Could not enumerate audio only devices (or none found).
nul: Immediate exit requested
出力フォーマットのリストを出す
対応した pixel_format=yuyv422、サイズが 640x480 であることがわかる。
>ffmpeg -hide_banner -list_options true -f dshow -i video="USB2.0 UVC PC Camera"
[dshow @ 000002615cb890c0] DirectShow video device options (from video devices)
[dshow @ 000002615cb890c0] Pin "繧ュ繝」繝励メ繝」" (alternative pin name "0")
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=640x480 fps=25 max s=640x480 fps=25
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=640x480 fps=25 max s=640x480 fps=25
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=160x120 fps=25 max s=160x120 fps=25
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=160x120 fps=25 max s=160x120 fps=25
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=176x144 fps=25 max s=176x144 fps=25
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=176x144 fps=25 max s=176x144 fps=25
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=320x240 fps=25 max s=320x240 fps=25
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=320x240 fps=25 max s=320x240 fps=25
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=352x288 fps=25 max s=352x288 fps=25
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=352x288 fps=25 max s=352x288 fps=25
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=640x480 fps=25 max s=640x480 fps=25
[dshow @ 000002615cb890c0] pixel_format=yuyv422 min s=640x480 fps=25 max s=640x480 fps=25
video=USB2.0 UVC PC Camera: Immediate exit requested
ffplay で表示する
表示するだけなら特に意識しなくてもいい。
出力フォーマットは、上で取得したリストの一番上のものが選ばれる?
ffplay -f dshow -i video="USB2.0 UVC PC Camera"
ffmpeg で録画する
ffmpeg の出力先を動画ファイルにするだけ。
ffmpeg -f dshow -i video="USB2.0 UVC PC Camera" video.mp4
ffmpeg でUSBカメラの映像を録画しつつ ffplay でモニターする
-filter_complex
の split
フィルターを使う。
ffmpeg から rawvideo
フォーマットでパイプに出力し、ffplay でパイプを入力とする。
-f rawvideo
は生データなので、ffplay には -f rawvideo
に加えてビデオサイズ -video_size
とフォーマット -pixel_format
を教えないといけない。リアルタイムに表示しているだけなので -framerate
は不要。
ffmpeg -hide_banner -y -f dshow -i video="USB2.0 UVC PC Camera" -filter_complex split[v1][v2] -map [v1] video.mp4 -map [v2] -f rawvideo - | ffplay -hide_banner -f rawvideo -video_size 640x480 -pixel_format yuyv422 -