ffmpeg abre webcam usando YUYV mas eu quero MJPEG

12

Eu preciso do ffmpeg para abrir a webcam (logitech c910) no modo MJPEG, porque a webcam pode fornecer ~ 24 usando o "protocolo" MJPEG e apenas ~ 10 fps usando o YUYV. Posso escolher entre eles usando a linha de comando do 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

Minha linha de comando atual:

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

O ffmpeg produz o fluxo h264 corrompido quando eu gravo da webcam, mas o h264 normal strem quando eu gravo do x11grab. Outros codecs (mjpeg, mpeg4) funcionam bem com a webcam ... Mas isso é outra história.

update Saída completa do console do ffmpeg: link (você pode ver que ele abre o dispositivo de vídeo no modo YUV, mas o dispositivo também pode fornecer saída MJPEG).

    
por pavelkolodin 28.10.2012 / 11:19

2 respostas

12

Você pode listar informações adicionais sobre o que sua webcam pode gerar com v4l2-ctl --list-formats-ext . Você também pode mostrar informações da webcam com o ffmpeg usando a opção -list_formats 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

Essa webcam do meu exemplo pode suportar formatos brutos ( yuyv422 ) e compactados ( mjpeg ), e você pode informar a ffmpeg qual deles você quer com a opção -input_format input.

Exemplos

Fluxo copie o fluxo de vídeo MJPEG (sem re-codificação):

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

Codifique novamente o vídeo bruto da webcam para o H.264:

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

O mesmo que acima, mas escolha manualmente a taxa de quadros e o tamanho do vídeo ( v4l2-ctl --list-formats-ext para a taxa de quadros disponível e tamanhos de vídeo):

ffmpeg -f v4l2 -input_format yuyv422 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4
  • Consulte a documentação do dispositivo de entrada video4linux2 para mais opções.

  • Se a taxa de quadros que está sendo produzida for menor do que a esperada, adicione mais luz: a webcam pode estar diminuindo a taxa de quadros para obter exposições mais longas em um ambiente escuro.

por 29.10.2012 / 18:55
0
ffmpeg -t 60 -f video4linux2 -input_format mjpeg -i /dev/video0 -c:v libx264 -strict -2 /DataVolume/share/Public/v/outputs.mp4
    
por 16.04.2018 / 13:56