ffmpeg öffnen Webcam mit YUYV, aber ich möchte MJPEG

14

Ich brauche ffmpeg, um die Webcam (logitech c910) im MJPEG-Modus zu öffnen, da die Webcam mit MJPEG "protocol" ~ 24 und mit YUYV nur ~ 10 fps liefern kann. Kann ich unter Verwendung der ffmpeg-Befehlszeile zwischen ihnen wählen?

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

Meine aktuelle Befehlszeile:

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 erzeugt einen beschädigten h264-Stream, wenn ich von der Webcam aufnehme, aber normales h264-Stream, wenn ich von x11grab aufnehme. Ein anderer Codec (mjpeg, mpeg4) funktioniert gut mit der Webcam ... Aber das ist eine andere Geschichte.

Vollständige Ausgabe von ffmpegs Konsole aktualisieren : http://pastebin.com/Hzem6CKF (Sie können sehen, dass das Videogerät im YUV-Modus geöffnet wird, aber das Gerät kann auch MJPEG-Outpud bereitstellen).

Pavelkolodin
quelle

Antworten:

13

Sie können zusätzliche Informationen darüber auflisten, womit Ihre Webcam ausgeben kann v4l2-ctl --list-formats-ext. Sie können mit ffmpeg auch Webcam-Informationen anzeigen, indem Sie die -list_formatsEingabeoption verwenden:

$ 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

Diese Webcam aus meinem Beispiel kann sowohl raw ( yuyv422) als auch compress ( mjpeg) Formate unterstützen und Sie können ffmpegmit der -input_formatEingabeoption sagen, welches Sie möchten .

Beispiele

Kopieren Sie den MJPEG-Videostream (keine Neukodierung):

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

Kodieren Sie das rohe Webcam-Video neu in H.264:

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

Wie oben, aber manuelles Auswählen von Bildrate und Videogröße ( v4l2-ctl --list-formats-extfür verfügbare Bildrate und Videogrößen):

ffmpeg -f v4l2 -input_format yuyv422 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4
  • Siehe die video4linux2 Eingabegerät Dokumentation für weitere Optionen.

  • Wenn die ausgegebene Bildrate niedriger als erwartet ist, fügen Sie mehr Licht hinzu: Die Webcam senkt möglicherweise die Bildrate, um längere Belichtungen in einer dunklen Umgebung zu erzielen.

Logan
quelle
0
ffmpeg -t 60 -f video4linux2 -input_format mjpeg -i /dev/video0 -c:v libx264 -strict -2 /DataVolume/share/Public/v/outputs.mp4
etwas Holz
quelle
4
Willkommen bei Super User! Können Sie das näher erläutern? Welche Informationen hat es insbesondere, die LordNekbeard nicht hat? :)
Bertieb
Keine Notwendigkeit, es -strict -2sei denn: 1) Sie ffmpegsind schrecklich veraltet und 2) Sie codieren AAC-Audio.
Logan