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 images par seconde 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 depuis une webcam, mais un H264 normal lorsque j’enregistre depuis x11grab. Un autre codec (mjpeg, mpeg4) fonctionne bien avec la webcam ... Mais ceci est une autre histoire.
update Sortie de la console complète de ffmpeg: http://Pastebin.com/Hzem6CKF (vous pouvez voir qu'il ouvre un périphérique vidéo dans YUV mode, mais le périphérique peut également fournir une sortie MJPEG).
Vous pouvez répertorier des informations supplémentaires sur ce que votre webcam peut afficher avec v4l2-ctl --list-formats-ext
. Vous pouvez également afficher les informations de la webcam avec ffmpeg à l’aide de l’option de saisie -list_formats
:
$ 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 bruts (yuyv422
) et compressés (mjpeg
) et vous pouvez indiquer à ffmpeg
lequel vous voulez avec l'option d'entrée -input_format
.
Flux copier le flux vidéo MJPEG (pas de réencodage):
ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -c:v copy output.mkv
Réencodez la vidéo webcam brute au format H.264:
ffmpeg -f v4l2 -input_format yuyv422 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4
Comme ci-dessus, mais choisissez manuellement la fréquence d'images et la taille de la vidéo (v4l2-ctl --list-formats-ext
pour la fréquence d'images et la taille des vidéos 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 périphérique d'entrée video4linux2 pour plus d'options.
Si la cadence en sortie est inférieure aux prévisions, ajoutez plus de lumière: la webcam peut réduire la cadence pour obtenir des expositions plus longues dans un environnement sombre.
ffmpeg -t 60 -f video4linux2 -input_format mjpeg -i /dev/video0 -c:v libx264 -strict -2 /DataVolume/share/Public/v/outputs.mp4