MJPEGモードでWebカメラ(logitech c910)を開くには、ffmpegが必要です。これは、WebカメラがMJPEG「プロトコル」を使用して最大24、YUYVを使用して最大10 fpsを提供できるためです。 ffmpegコマンドラインを使用してそれらから選択できますか?
xx@(none) ~ $ v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUV 4:2:2 (YUYV)
Index : 1
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : MJPEG
私の現在のコマンドライン:
ffmpeg -y -f alsa -i hw:3,0 -f video4linux2 -r 20 -s 1280x720 -i /dev/video0 -acodec libfaac -ab 128k -vcodec libx264 /tmp/web.avi
ffmpegは、ウェブカメラから録画すると破損したh264ストリームを生成しますが、x11grabから録画すると通常のh264ストリームを生成します。別のコーデック(mjpeg、mpeg4)はウェブカメラでうまく動作します...しかし、これは別の話です。
updateffmpegのフルコンソール出力: http://Pastebin.com/Hzem6CKF (YUVでビデオデバイスを開くことがわかりますモード、ただしデバイスはMJPEG outpudも提供できます)。
v4l2-ctl --list-formats-ext
を使用して、ウェブカメラが出力できる追加情報をリストできます。 -list_formats
入力オプションを使用して、ffmpegでWebカメラ情報を表示することもできます。
$ ffmpeg -f video4linux2 -list_formats all -i /dev/video0
[...]
[video4linux2,v4l2 @ 0x1fb7660] Raw : yuyv422 : YUV 4:2:2 (YUYV) : 640x480 160x120 176x144 320x176 320x240 352x288 432x240 544x288 640x360
[video4linux2,v4l2 @ 0x1fb7660] Compressed: mjpeg : MJPEG : 640x480 160x120 176x144 320x176 320x240 352x288 432x240 544x288 640x360
この例のこのWebカメラは、未加工(yuyv422
)と圧縮(mjpeg
)の両方の形式をサポートでき、ffmpeg
に-input_format
入力で必要な形式を指定できますオプション。
MJPEGビデオストリームのストリームコピー(再エンコードなし):
ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -c:v copy output.mkv
生のウェブカメラビデオをH.264に再エンコードします。
ffmpeg -f v4l2 -input_format yuyv422 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4
上記と同じですが、フレームレートとビデオサイズを手動で選択します(利用可能なフレームレートとビデオサイズはv4l2-ctl --list-formats-ext
):
ffmpeg -f v4l2 -input_format yuyv422 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4
その他のオプションについては video4linux2 input device のドキュメントを参照してください。
出力されるフレームレートが予想よりも低い場合は、さらに光を追加します。Webカメラがフレームレートを下げて、薄暗い環境で長時間露光を行う可能性があります。
ffmpeg -t 60 -f video4linux2 -input_format mjpeg -i /dev/video0 -c:v libx264 -strict -2 /DataVolume/share/Public/v/outputs.mp4