ffmpeg webcam ouverte en utilisant YUYV mais je veux MJPEG


14

J'ai besoin de ffmpeg pour ouvrir la webcam (logitech c910) en mode MJPEG, car la webcam peut donner ~ 24 en utilisant le "protocole" MJPEG et seulement ~ 10 fps en utilisant le YUYV. Puis-je choisir entre eux en utilisant la ligne de commande 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

Ma ligne de commande actuelle:

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 produit un flux h264 corrompu lorsque j'enregistre à partir d'une webcam, mais un strem h264 normal lorsque j'enregistre à partir de x11grab. Un autre codec (mjpeg, mpeg4) fonctionne bien avec webcam ... Mais c'est une autre histoire.

mettre à jour la sortie complète de la console ffmpeg: http://pastebin.com/Hzem6CKF (vous pouvez voir qu'elle ouvre le périphérique vidéo en mode YUV, mais le périphérique peut également fournir une sortie MJPEG).

Réponses:


13

Vous pouvez répertorier des informations supplémentaires sur ce que votre webcam peut produire v4l2-ctl --list-formats-ext. Vous pouvez également afficher des informations sur la webcam avec ffmpeg en utilisant l' -list_formatsoption d'entrée:

$ 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

Cette webcam de mon exemple peut prendre en charge les formats raw ( yuyv422) et compressé ( mjpeg), et vous pouvez dire ffmpeglequel vous voulez avec l' -input_formatoption d'entrée.

Exemples

Copiez en flux le flux vidéo MJPEG (pas de ré-encodage):

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

Ré-encoder la vidéo webcam brute en H.264:

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

Identique à ci-dessus mais choisissez manuellement la fréquence d'images et la taille de la vidéo ( v4l2-ctl --list-formats-extpour la fréquence d'images et les tailles vidéo disponibles):

ffmpeg -f v4l2 -input_format yuyv422 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4
  • Voir la documentation du périphérique d'entrée video4linux2 pour plus d'options.

  • Si la fréquence d'images émise est inférieure à celle attendue, ajoutez plus de lumière: la webcam peut réduire la fréquence d'images pour obtenir des expositions plus longues dans un environnement sombre.


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

4
Bienvenue sur Super User! Pouvez-vous développer davantage sur ce sujet? En particulier, de quelles informations dispose-t-elle que LordNekbeard ne possède pas? :)
bertieb

Pas besoin de -strict -2moins que: 1) votre ffmpeghorriblement obsolète, et 2) vous encodez de l'audio AAC.
llogan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.