ffmpeg apre la webcam usando YUYV ma voglio MJPEG


14

Ho bisogno di ffmpeg per aprire la webcam (logitech c910) in modalità MJPEG, perché la webcam può dare ~ 24 usando il "protocollo" MJPEG e solo ~ 10 fps usando YUYV. Posso scegliere tra loro usando la riga di comando di 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

La mia riga di comando corrente:

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 produce stream h264 corrotto quando registro da webcam, ma normale st2 h264 quando registro da x11grab. Un altro codec (mjpeg, mpeg4) funziona bene con la webcam ... Ma questa è un'altra storia.

aggiorna l'output della console completa di ffmpeg: http://pastebin.com/Hzem6CKF (puoi vedere che apre il dispositivo video in modalità YUV, ma il dispositivo può anche fornire l'outpud MJPEG).

Risposte:


13

Puoi elencare ulteriori informazioni su ciò che la tua webcam può produrre v4l2-ctl --list-formats-ext. Puoi anche mostrare le informazioni della webcam con ffmpeg usando l' -list_formatsopzione di input:

$ 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

Questa webcam dal mio esempio può supportare sia i formati raw ( yuyv422) che compressed ( mjpeg) e puoi dire ffmpegquale vuoi con l' -input_formatopzione di input.

Esempi

Stream copia il flusso video MJPEG (senza ricodifica):

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

Ricodifica il video della webcam non elaborato su H.264:

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

Come sopra ma scegli manualmente la frequenza dei fotogrammi e le dimensioni del video ( v4l2-ctl --list-formats-extper frequenza dei fotogrammi e dimensioni video disponibili):

ffmpeg -f v4l2 -input_format yuyv422 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4
  • Vedere la documentazione del dispositivo di input video4linux2 per ulteriori opzioni.

  • Se la frequenza dei fotogrammi in uscita è inferiore alle aspettative, aggiungere più luce: la webcam potrebbe ridurre la frequenza dei fotogrammi per ottenere esposizioni più lunghe in un ambiente buio.


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

4
Benvenuto in Super User! Puoi approfondire su questo? In particolare, quali informazioni ha che LordNekbeard's non ha? :)
bertieb

Non è necessario a -strict -2meno che: 1) il tuo ffmpegsia orribilmente obsoleto e 2) stai codificando l'audio AAC.
llogan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.