ffmpeg video recording freezes after "Invalid data found when processing input"

4

1

I am trying to record my old VHS tapes using a USB video capture device and the following command:

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

but sometimes, unexpectedly during the recording, ffmpeg freezes the recording of video and remains on the last frame (audio continues to be recorded). The error message is something like:

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

I found almost zero information on the internet about this. I found the problem described as a feature request here: https://trac.ffmpeg.org/ticket/4795

Also, I had some trouble with a warning message before this error, which doesn't seem to be related and doesn't seem to affect the video recording, but I also wonder what it means:

[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)

Using trial-and-error, it seems that the warnings disappear when I set -f v4l2 -thread_queue_size 32 and -f alsa -thread_queue_size 2048. I don't know why. When I raise the thread queue size for the video input, for example to 512 I have no warning but I have dropped frames.

I wish I can use ffmpeg for my recordings. VLC has no problem recording, but I am also having trouble with the parameters, I haven't studied them enough yet. If someone can suggest an alternative command for vlc, to record lossless, I will switch to vlc...

The full output of ffmpeg is:

$ 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

Vassilis Kotaras

Posted 2016-03-04T12:27:35.760

Reputation: 116

The complete console output from your command is required. – llogan – 2016-03-04T22:52:55.613

I added the output in the original message – Vassilis Kotaras – 2016-03-08T07:34:49.203

I am amazed that almost no one seems to have a similar problem. Am I so rare? I found almost zero information about this, and no solution :( – Vassilis Kotaras – 2016-03-15T09:50:39.887

I admit I didn't really look into your question, but because FFmpeg development is so active the first step is to test a recent ffmpeg from the current git master branch. Download.

– llogan – 2016-03-15T16:45:38.323

I installed the latest ffmpeg and codecs following the instructions here: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu and the ffmpeg version is now N-79065-g7d9e064 (why this strange number?). Before, the version I had was 2.7.6, from Ubuntu repositories). Anyway, I get exactly the same error, "dequeued v4l2 buffer contains 414720 bytes, etc". I am suspecting that this happens when the video signal from the VHS tape is bad and the image is unstable, but I cannot do anything about that.

– Vassilis Kotaras – 2016-03-18T11:21:51.243

Answers

3

I couldn't find any solution to this ffmpeg problem, and I recently found this article saying:

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.

So, I started to use mencoder instead. This blog helped me to start using mencoder: http://easycap.blogspot.com/p/command-line-tv.html

I compiled MPlayer (which contains mencoder) using the source code given at http://www.mplayerhq.hu

Vassilis Kotaras

Posted 2016-03-04T12:27:35.760

Reputation: 116

Try ffmpeg with this command: ffmpeg -f alsa -ac 2 -i default -f v4l2 -standard pal -err_detect ignore_err -i /dev/video0 -c:v libx264 -qp 0 -preset fast -strict -2 zzz.mp4 – Gyan – 2016-04-21T07:13:03.670

I just tried. Same thing happens :( – Vassilis Kotaras – 2016-05-05T08:37:36.377

1

This is still a bug in ffmpeg 3.3. Even though ffplay correctly recovers after this error (which for me happens on scene changes / fast forwarding), ffmpeg just stops processing frames. I had the same problem with this device, and I couldn't get mencoder to use the exact parameters (esp. regarding deinterlacing) I wanted, so I used a combination of mencoder (raw AVI to stdout) and ffmpeg (yadif deinterlace, map audio, encode x264 and mux to mkv) which works great.

You could of course store the raw AVI data directly, but with ~70GByte/h I didn't have enough space for that.

(Partially taken from here)

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

phiresky

Posted 2016-03-04T12:27:35.760

Reputation: 131