ffmpeg offene Webcam mit YUYV aber ich möchte MJPEG

29603
pavelkolodin

Ich brauche ffmpeg, um die Webcam (logitech c910) im MJPEG-Modus zu öffnen, da die Webcam mit MJPEG "Protokoll" ~ 24 und mit YUYV nur ~ 10 fps geben kann. Kann ich mit 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 normaler h264-strem, wenn ich von x11grab aufzeichne. Andere Codecs (MJPEG, MPEG4) funktionieren gut mit der Webcam ... Aber das ist eine andere Geschichte.

Aktualisieren Sie die Ausgabe der Full ffmpeg-Konsole: http://pastebin.com/Hzem6CKF (Sie können sehen, dass das Videogerät im YUV-Modus geöffnet wird, das Gerät kann jedoch auch MJPEG-Outpud bereitstellen).

13

2 Antworten auf die Frage

12
LordNeckbeard

Sie können zusätzliche Informationen dazu auflisten, was Ihre Webcam ausgeben kann v4l2-ctl --list-formats-ext. Sie können Webcam-Informationen auch mit ffmpeg 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 die Formate raw ( yuyv422) als auch komprimierte ( mjpeg) unterstützen, und Sie können ffmpegmit der -input_formatEingabeoption auswählen, welches Sie möchten .

Beispiele

Stream kopieren Sie den MJPEG-Videostream (keine Umcodierung):

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

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

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

Wie oben, aber wählen Sie manuell die 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 verringert möglicherweise die Bildrate, um längere Belichtungszeiten in einer dunklen Umgebung zu erhalten.

0
somewood
ffmpeg -t 60 -f video4linux2 -input_format mjpeg -i /dev/video0 -c:v libx264 -strict -2 /DataVolume/share/Public/v/outputs.mp4 
Willkommen bei Super User! Kannst du das erweitern? Welche Informationen enthält LordNekbeards Informationen? :) bertieb vor 6 Jahren 4
Keine Notwendigkeit für "-strict -2", es sei denn: 1) Ihr "ffmpeg" ist schrecklich veraltet und 2) Sie kodieren AAC-Audio. LordNeckbeard vor 6 Jahren 0