YUYVを使用してffmpegオープンウェブカメラがMJPEGが欲しい


14

MJPEGモードでウェブカメラ(logitech c910)を開くにはffmpegが必要です。ウェブカメラは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は、Webカメラから記録すると破損したh264ストリームを生成しますが、x11grabから記録すると通常のh264ストリームを生成します。別のコーデック(mjpeg、mpeg4)はWebカメラでうまく機能します...しかし、これは別の話です。

完全なffmpegのコンソール出力を更新します:http : //pastebin.com/Hzem6CKF(YUVモードでビデオデバイスを開きますが、デバイスはMJPEG outpudも提供できます)。

回答:


13

Webカメラで出力できるものに関する追加情報を一覧表示できますv4l2-ctl --list-formats-ext-list_formats入力オプションを使用して、ffmpegでウェブカメラ情報を表示することもできます。

$ 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

私の例のこのウェブカメラは、生(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入力デバイスのドキュメントを参照してください。

  • 出力されるフレームレートが予想よりも低い場合は、より多くの光を追加します。ウェブカメラは、薄暗い環境でより長い露出を得るためにフレームレートを下げている可能性があります。


0
ffmpeg -t 60 -f video4linux2 -input_format mjpeg -i /dev/video0 -c:v libx264 -strict -2 /DataVolume/share/Public/v/outputs.mp4

4
スーパーユーザーへようこそ!これを拡張できますか?特に、NordNekbeardが持っていないのはどのような情報ですか?:)
bertieb

次の場合を-strict -2除き、必要はありません。1)ffmpeg恐ろしく古くなっている、2)AACオーディオをエンコードしている。
llogan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.