ffmpeg trava ao tentar gravar vídeo em resoluções mais altas

3

Estou tentando gravar alguns vídeos usando uma câmera USB, mas estou tendo alguns problemas ao usar o ffmpeg .

Se eu executar ffmpeg -f video4linux2 -t 00:00:10 -i /dev/video0 out.mpg , o programa tentará gravar na resolução 640x480 e ffmpeg trava.

No entanto, se eu adicionar o -s ao ffmpeg e gravar em resoluções inferiores a 640x480 (por exemplo, 320x240), o vídeo será gravado com êxito.

Após um travamento, se eu pressionar CTRL+C , o ffmpeg continuará, produzindo um arquivo de tamanho 0 kB. Usando strace , posso ver que uma chamada ioctl para o dispositivo mantém retornos -EINVAL e subseqüentes ioctl s retorno -EAGAIN .

ioctl(3, VIDIOC_G_STD, 0xbe84dfb0)      = -1 EINVAL (Invalid argument)
ioctl(3, VIDIOC_DQBUF, {type=V4L2_BUF_TYPE_VIDEO_CAPTURE}) = -1 EAGAIN (Resource temporarily unavailable)

Alguma idéia de por que isso acontece?

Estou usando ffmpeg versão 2.8.7, construída através de busybox 1.25. A arquitetura do host é um processador ARM executando o kernel 3.2.

Eu também tentei compilar a versão mais recente a partir do código-fonte, e o problema persiste ...

    
por Guilherme Costa 24.04.2017 / 22:50

1 resposta

1

Descobri o motivo: transcodificação e volume de dados brutos.

Usando a linha de comando mencionada na minha pergunta, eu estava lendo um formato bruto (yuv422) e transcodificando-o para o mpeg-1, que era a codificação padrão para minha versão de ffmpeg . A quantidade de dados sendo transmitida da câmera era simplesmente demais para o processador, causando o travamento. A câmera que eu estava usando também era capaz de transmitir em formato compactado (mjpeg). Ao mudar para este formato, ffmpeg não foi mais interrompido e conseguiu gravar a 15 fps.

No entanto, houve um passo de transcodificação, de mjpeg para mpeg-1. Consegui atingir uma contagem de fps maior informando ffmpeg para copiar o fluxo, removendo a última etapa de transcodificação.

    
por 26.07.2017 / 12:47

Tags