ffmpeg open webcam using YUYV but i want MJPEG

58,644

You can list additional information about what your webcam can output with v4l2-ctl --list-formats-ext. You can also show webcam information with ffmpeg using the -list_formats input option:

$ 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

This webcam from my example can support both raw (yuyv422) and compressed (mjpeg) formats, and you can tell ffmpeg which one you want with the -input_format input option.

Examples

Stream copy the MJPEG video stream (no re-encoding):

ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -c:v copy output.mkv

Re-encode the raw webcam video to H.264:

ffmpeg -f v4l2 -input_format yuyv422 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4

Same as above but manually choose frame rate and video size (v4l2-ctl --list-formats-ext for available frame rate and video sizes):

ffmpeg -f v4l2 -input_format yuyv422 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4
  • See the video4linux2 input device documentation for more options.

  • If the frame rate being output is lower than expected then add more light: the webcam may be lowering the frame rate to get longer exposures in a dim environment.

Share:
58,644

Related videos on Youtube

pavelkolodin
Author by

pavelkolodin

Updated on September 18, 2022

Comments

  • pavelkolodin
    pavelkolodin almost 2 years

    I need ffmpeg to open webcam (Logitech C910) in MJPEG mode, because the webcam can give ~24 fps using the MJPEG "protocol" and only ~10 fps using the YUYV. Can I choose between them using the ffmpeg command line?

    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
    

    My current command line:

    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 produces corrupted h264 stream when i record from webcam, but normal h264 strem when i record from x11grab. Another codecs (mjpeg, mpeg4) works well with webcam... But this is another story.

    update Full ffmpeg's console output: http://pastebin.com/Hzem6CKF (you can see it opens video device in YUV mode, but the device can provide MJPEG outpud also).

  • bertieb
    bertieb about 6 years
    Welcome to Super User! Can you expand on this? In particular, what information does it have that LordNekbeard's doesn't? :)
  • Elisa Cha Cha
    Elisa Cha Cha about 6 years
    No need for -strict -2 unless: 1) your ffmpeg is horribly outdated, and 2) you are encoding AAC audio.