ffmpeg gravação de vídeo congela após “Dados inválidos encontrados ao processar entrada”

4

Estou tentando gravar minhas fitas VHS antigas usando um dispositivo de captura de vídeo USB e o seguinte comando:

ffmpeg -f alsa -ac 2 -i default -f v4l2 -standard pal -i /dev/video0 -c:v libx264 -qp 0 -preset fast -strict -2 zzz.mp4

mas às vezes, inesperadamente durante a gravação, o ffmpeg congela a gravação de vídeo e permanece no último quadro (o áudio continua a ser gravado). A mensagem de erro é algo como:

[video4linux2,v4l2 @ 0x23e51a0] Dequeued v4l2 buffer contains 414720 bytes, but 829440 were expected. Flags: 0x00002005. 
/dev/video0: Invalid data found when processing input

Eu encontrei quase zero informações na internet sobre isso. Eu encontrei o problema descrito como uma solicitação de recurso aqui: link

Além disso, tive alguns problemas com uma mensagem de aviso antes desse erro, que não parece estar relacionado e parece não afetar a gravação de vídeo, mas também me pergunto o que isso significa:

[video4linux2,v4l2 @ 0x23e51a0] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[alsa @ 0x23cc360] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)

Usando a tentativa e erro, parece que os avisos desaparecem quando eu -f v4l2 -thread_queue_size 32 e -f alsa -thread_queue_size 2048 . Eu não sei porque. Quando eu elevar o tamanho da fila de discussão para a entrada de vídeo, por exemplo, para 512, não tenho aviso, mas descartei quadros.

Eu gostaria de poder usar o ffmpeg para minhas gravações. O VLC não tem problemas para gravar, mas também estou tendo problemas com os parâmetros, ainda não os estudei o suficiente. Se alguém puder sugerir um comando alternativo para vlc, para gravar sem perdas, eu mudarei para vlc ...

A saída completa do ffmpeg é:

$ ffmpeg -f alsa -ac 2 -i default -f v4l2 -standard pal -i /dev/video0 -c:v libx264 -qp 0 -preset fast -strict -2 zzz.mp4
ffmpeg version 2.7.6-0ubuntu0.15.10.1 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.2.1 (Ubuntu 5.2.1-22ubuntu2) 20151010
  configuration: --prefix=/usr --extra-version=0ubuntu0.15.10.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --enable-shared --disable-stripping --enable-avresample --enable-avisynth --enable-frei0r --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-openal --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libxvid --enable-libzvbi --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-libssh --enable-libsoxr --enable-libx264 --enable-libopencv --enable-libx265
  libavutil      54. 27.100 / 54. 27.100
  libavcodec     56. 41.100 / 56. 41.100
  libavformat    56. 36.100 / 56. 36.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 16.101 /  5. 16.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.100 /  1.  2.100
  libpostproc    53.  3.100 / 53.  3.100
Guessed Channel Layout for  Input Stream #0.0 : stereo
Input #0, alsa, from 'default':
  Duration: N/A, start: 1457422230.571465, bitrate: 1536 kb/s
    Stream #0:0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
Input #1, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 4454.267377, bitrate: 165888 kb/s
    Stream #1:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 720x576, 165888 kb/s, 25 fps, 25 tbr, 1000k tbn, 1000k tbc
File 'zzz.mp4' already exists. Overwrite ? [y/N] y
No pixel format specified, yuv422p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.                                
[libx264 @ 0x231cd00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 LZCNT
[libx264 @ 0x231cd00] profile High 4:4:4 Predictive, level 3.0, 4:2:2 8-bit
[libx264 @ 0x231cd00] 264 - core 146 r2555 0c21480 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=2 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=6 psy=0 mixed_ref=1 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=1 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc=cqp mbtree=0 qp=0
Output #0, mp4, to 'zzz.mp4':
  Metadata:
    encoder         : Lavf56.36.100
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv422p, 720x576, q=-1--1, 25 fps, 12800 tbn, 25 tbc
    Metadata:
      encoder         : Lavc56.41.100 libx264
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc56.41.100 aac
Stream mapping:
  Stream #1:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
  Stream #0:0 -> #0:1 (pcm_s16le (native) -> aac (native))
Press [q] to stop, [?] for help
[video4linux2,v4l2 @ 0x231a180] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[alsa @ 0x2301360] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[video4linux2,v4l2 @ 0x231a180] Dequeued v4l2 buffer contains 414720 bytes, but 829440 were expected. Flags: 0x00002005.
/dev/video0: Invalid data found when processing input
frame= 1962 fps= 17 q=-1.0 Lsize=  409086kB time=00:01:53.53 bitrate=29516.7kbits/s    
video:407234kB audio:1777kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.018333%
[libx264 @ 0x231cd00] frame I:346   Avg QP: 0.00  size:186290
[libx264 @ 0x231cd00] frame P:1616  Avg QP: 0.00  size:218162
[libx264 @ 0x231cd00] mb I  I16..4: 92.3%  0.0%  7.7%
[libx264 @ 0x231cd00] mb P  I16..4: 76.1%  0.0% 22.8%  P16..4:  0.2%  0.5%  0.4%  0.0%  0.0%    skip: 0.0%
[libx264 @ 0x231cd00] 8x8 transform intra:0.0% inter:76.8%
[libx264 @ 0x231cd00] coded y,uvDC,uvAC intra: 100.0% 100.0% 100.0% inter: 100.0% 100.0% 100.0%
[libx264 @ 0x231cd00] i16 v,h,dc,p:  0% 100%  0%  0%
[libx264 @ 0x231cd00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 10% 78%  3%  1%  2%  3%  1%  3%  1%
[libx264 @ 0x231cd00] i8c dc,h,v,p:  1% 98%  0%  0%
[libx264 @ 0x231cd00] Weighted P-Frames: Y:31.7% UV:20.6%
[libx264 @ 0x231cd00] ref P L0: 52.8% 47.2%
[libx264 @ 0x231cd00] kb/s:42508.35
    
por Vassilis Kotaras 04.03.2016 / 13:27

2 respostas

3

Não encontrei nenhuma solução para este problema de ffmpeg e recentemente encontrei artigo dizendo:

As it seems, the stk1160 device sends these broken frames through to the v4l2 device and once they reach ffmpeg, it chokes and reports invalid frames. Although that is part of the “honest” quality of ffmpeg, I consider it a bug here as it exits the transcoding process and makes ffmpeg unsuitable for the task at hand.

Então, comecei a usar o mencoder. Este blog me ajudou a começar a usar o mencoder: link

Eu compilei o MPlayer (que contém o mencoder) usando o código fonte dado no link

    
por 20.04.2016 / 11:50
0

Este ainda é um bug no ffmpeg 3.3. Mesmo que o ffplay se recupere corretamente após esse erro (o que, para mim, acontece em mudanças de cena / fast forwarding), o ffmpeg simplesmente pára o processamento de quadros. Eu tive o mesmo problema com este dispositivo, e não consegui usar o mencoder para usar os parâmetros exatos (especialmente quanto ao desentrelaçamento) que eu queria, então usei uma combinação de mencoder ( AVI bruto para stdout) e ffmpeg (yadif desentrelaçamento, mapear áudio, codificar x264 e mux para mkv) que funciona muito bem.

Você poderia, é claro, armazenar os dados AVI brutos diretamente, mas com ~ 70GByte / h eu não tinha espaço suficiente para isso.

(Parcialmente tirado de aqui )

mencoder -endpos 1:40:00 tv:// -tv device=/dev/video0:input=4:norm=PAL:width=720:height=576:alsa:adevice=hw.3:forceaudio:buffersize=128 -oac pcm -ovc copy -o - -really-quiet | ffmpeg -i - -vf yadif=mode=send_field:parity=tff -map_channel 0.1.1 -c:a flac -c:v libx264 -preset veryfast -crf 16 011.mkv

    
por 21.04.2017 / 15:16