[FFmpeg-trac] #4370(undetermined:new): transcoding a broken source may result in success even with -xerror

FFmpeg trac at avcodec.org
Tue Mar 17 17:08:40 CET 2015


#4370: transcoding a broken source may result in success even with -xerror
--------------------------------------+----------------------------------
             Reporter:  aca           |                     Type:  defect
               Status:  new           |                 Priority:  normal
            Component:  undetermined  |                  Version:  2.6
             Keywords:                |               Blocked By:
             Blocking:                |  Reproduced by developer:  0
Analyzed by developer:  0             |
--------------------------------------+----------------------------------
 This problem was reported as Debian bug 780344 [1].

 Using ffmpeg for programmatic detection of broken files (using the
 '-xerror' option) doesn't always work, because the program sometimes exits
 with 0, even when errors decoding some part of the input occured.

 How to reproduce:
 {{{
 % ffmpeg -xerror -v 9 -loglevel 99 -i ./Mill_CPU_for_Humans_-_Part_2.mp4
 -f null /dev/null ; echo $?
 ffmpeg version 2.6.1-1 Copyright (c) 2000-2015 the FFmpeg developers
   built with gcc 4.9.2 (Debian 4.9.2-10)
   configuration: --prefix=/usr --extra-version=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-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-libopus
 --enable-libpulse --enable-libschroedinger --enable-libshine --enable-
 libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-
 libvorbis --enable-libwavpack --enable-libwebp --enable-libxvid --enable-
 opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-
 libzvbi --enable-libzmq --enable-frei0r --enable-libvpx --enable-libx264
 --enable-libsoxr --enable-gnutls --enable-openal --enable-libopencv
 --enable-librtmp --enable-libx265
   libavutil      54. 20.100 / 54. 20.100
   libavcodec     56. 26.100 / 56. 26.100
   libavformat    56. 25.101 / 56. 25.101
   libavdevice    56.  4.100 / 56.  4.100
   libavfilter     5. 11.102 /  5. 11.102
   libavresample   2.  1.  0 /  2.  1.  0
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  3.100 / 53.  3.100
 Splitting the commandline.
 Reading option '-xerror' ... matched as option 'xerror' (exit on error)
 with argument '1'.
 Reading option '-v' ... matched as option 'v' (set logging level) with
 argument '9'.
 Reading option '-loglevel' ... matched as option 'loglevel' (set logging
 level) with argument '99'.
 Reading option '-i' ... matched as input file with argument
 './Mill_CPU_for_Humans_-_Part_2.mp4'.
 Reading option '-f' ... matched as option 'f' (force format) with argument
 'null'.
 Reading option '/dev/null' ... matched as output file.
 Finished splitting the commandline.
 Parsing a group of options: global .
 Applying option xerror (exit on error) with argument 1.
 Applying option v (set logging level) with argument 9.
 Successfully parsed a group of options.
 Parsing a group of options: input file ./Mill_CPU_for_Humans_-_Part_2.mp4.
 Successfully parsed a group of options.
 Opening an input file: ./Mill_CPU_for_Humans_-_Part_2.mp4.
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0xb8e5e0] Format mov,mp4,m4a,3gp,3g2,mj2 probed
 with size=2048 and score=100
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0xb8e5e0] ISO: File Type Major Brand: mp42
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0xb8e5e0] Before avformat_find_stream_info()
 pos: 322624 bytes read:345903 seeks:0
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0xb8e5e0] All info found
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0xb8e5e0] After avformat_find_stream_info()
 pos: 571520 bytes read:587940 seeks:0 frames:14
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './Mill_CPU_for_Humans_-
 _Part_2.mp4':
   Metadata:
     major_brand     : mp42
     minor_version   : 0
     compatible_brands: isommp42
     creation_time   : 2013-11-19 11:10:06
   Duration: 00:17:25.41, start: 0.000000, bitrate: 189 kb/s
     Stream #0:0(und), 13, 1/50: Video: h264 (High) (avc1 / 0x31637661),
 yuv420p(left), 1280x720, 1/50, 1118 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc
 (default)
     Metadata:
       handler_name    : VideoHandler
     Stream #0:1(und), 1, 1/44100: Audio: aac (LC) (mp4a / 0x6134706D),
 44100 Hz, stereo, fltp, 191 kb/s (default)
     Metadata:
       creation_time   : 2013-11-19 11:10:26
       handler_name    : IsoMedia File Produced by Google, 5-11-2011
 Successfully opened the file.
 Parsing a group of options: output file /dev/null.
 Applying option f (force format) with argument null.
 Successfully parsed a group of options.
 Opening an output file: /dev/null.
 Successfully opened the file.
 detected 4 logical cores
 [graph 0 input from stream 0:0 @ 0xb8fde0] Setting 'video_size' to value
 '1280x720'
 [graph 0 input from stream 0:0 @ 0xb8fde0] Setting 'pix_fmt' to value '0'
 [graph 0 input from stream 0:0 @ 0xb8fde0] Setting 'time_base' to value
 '1/50'
 [graph 0 input from stream 0:0 @ 0xb8fde0] Setting 'pixel_aspect' to value
 '0/1'
 [graph 0 input from stream 0:0 @ 0xb8fde0] Setting 'sws_param' to value
 'flags=2'
 [graph 0 input from stream 0:0 @ 0xb8fde0] Setting 'frame_rate' to value
 '25/1'
 [graph 0 input from stream 0:0 @ 0xb8fde0] w:1280 h:720 pixfmt:yuv420p
 tb:1/50 fr:25/1 sar:0/1 sws_param:flags=2
 [AVFilterGraph @ 0xb83dc0] query_formats: 3 queried, 2 merged, 0 already
 done, 0 delayed
 [graph 1 input from stream 0:1 @ 0xe58140] Setting 'time_base' to value
 '1/44100'
 [graph 1 input from stream 0:1 @ 0xe58140] Setting 'sample_rate' to value
 '44100'
 [graph 1 input from stream 0:1 @ 0xe58140] Setting 'sample_fmt' to value
 'fltp'
 [graph 1 input from stream 0:1 @ 0xe58140] Setting 'channel_layout' to
 value '0x3'
 [graph 1 input from stream 0:1 @ 0xe58140] tb:1/44100 samplefmt:fltp
 samplerate:44100 chlayout:0x3
 [audio format for output stream 0:1 @ 0xb79cc0] Setting 'sample_fmts' to
 value 's16'
 [audio format for output stream 0:1 @ 0xb79cc0] auto-inserting filter
 'auto-inserted resampler 0' between the filter 'Parsed_anull_0' and the
 filter 'audio format for output stream 0:1'
 [AVFilterGraph @ 0xb8e000] query_formats: 4 queried, 6 merged, 3 already
 done, 0 delayed
 [auto-inserted resampler 0 @ 0xe5ad80] ch:2 chl:stereo fmt:fltp r:44100Hz
 -> ch:2 chl:stereo fmt:s16 r:44100Hz
 Output #0, null, to '/dev/null':
   Metadata:
     major_brand     : mp42
     minor_version   : 0
     compatible_brands: isommp42
     encoder         : Lavf56.25.101
     Stream #0:0(und), 0, 1/25: Video: rawvideo (I420 / 0x30323449),
 yuv420p(left), 1280x720, 1/25, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
 (default)
     Metadata:
       handler_name    : VideoHandler
       encoder         : Lavc56.26.100 rawvideo
     Stream #0:1(und), 0, 1/44100: Audio: pcm_s16le, 44100 Hz, stereo, s16,
 1411 kb/s (default)
     Metadata:
       creation_time   : 2013-11-19 11:10:26
       handler_name    : IsoMedia File Produced by Google, 5-11-2011
       encoder         : Lavc56.26.100 pcm_s16le
 Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
   Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native))
 Press [q] to stop, [?] for help
 [null @ 0xd69c80] Encoder did not produce proper pts, making some up.
 [h264 @ 0xe1d6a0] AVC: nal size 5421ime=00:02:24.56 bitrate=N/A
     Last message repeated 1 times
 [h264 @ 0xe1d6a0] no frame!
 [output stream 0:0 @ 0xb91720] EOF on sink link output stream 0:0:default.
 [output stream 0:1 @ 0xe585a0] EOF on sink link output stream 0:1:default.
 No more output streams to write to, finishing.
 frame= 3678 fps=286 q=0.0 Lsize=N/A time=00:02:27.42 bitrate=N/A
 video:345kB audio:25396kB subtitle:0kB other streams:0kB global
 headers:0kB muxing overhead: unknown
 Input file #0 (./Mill_CPU_for_Humans_-_Part_2.mp4):
   Input stream #0:0 (video): 3679 packets read (20961343 bytes); 3678
 frames decoded;
   Input stream #0:1 (audio): 6349 packets read (3538366 bytes); 6349
 frames decoded (6501376 samples);
   Total: 10028 packets (24499709 bytes) demuxed
 Output file #0 (/dev/null):
   Output stream #0:0 (video): 0 frames encoded; 3678 packets muxed (353088
 bytes);
   Output stream #0:1 (audio): 6349 frames encoded (6501376 samples); 6349
 packets muxed (26005504 bytes);
   Total: 10027 packets (26358592 bytes) muxed
 10031 frames successfully decoded, 0 decoding errors
 [AVIOContext @ 0xb8ddc0] Statistics: 24822333 bytes read, 4 seeks
 0
 }}}


 The problem seems to be caused by threading, because adding '-threads 1'
 works around it:
 {{{
 % ffmpeg -threads 1 -xerror -v 9 -loglevel 99 -i ./Mill_CPU_for_Humans_-
 _Part_2.mp4 -f null /dev/null ; echo $?
 ffmpeg version 2.6.1-1 Copyright (c) 2000-2015 the FFmpeg developers
   built with gcc 4.9.2 (Debian 4.9.2-10)
   configuration: --prefix=/usr --extra-version=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-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-libopus
 --enable-libpulse --enable-libschroedinger --enable-libshine --enable-
 libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-
 libvorbis --enable-libwavpack --enable-libwebp --enable-libxvid --enable-
 opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-
 libzvbi --enable-libzmq --enable-frei0r --enable-libvpx --enable-libx264
 --enable-libsoxr --enable-gnutls --enable-openal --enable-libopencv
 --enable-librtmp --enable-libx265
   libavutil      54. 20.100 / 54. 20.100
   libavcodec     56. 26.100 / 56. 26.100
   libavformat    56. 25.101 / 56. 25.101
   libavdevice    56.  4.100 / 56.  4.100
   libavfilter     5. 11.102 /  5. 11.102
   libavresample   2.  1.  0 /  2.  1.  0
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  3.100 / 53.  3.100
 Splitting the commandline.
 Reading option '-threads' ... matched as AVOption 'threads' with argument
 '1'.
 Reading option '-xerror' ... matched as option 'xerror' (exit on error)
 with argument '1'.
 Reading option '-v' ... matched as option 'v' (set logging level) with
 argument '9'.
 Reading option '-loglevel' ... matched as option 'loglevel' (set logging
 level) with argument '99'.
 Reading option '-i' ... matched as input file with argument
 './Mill_CPU_for_Humans_-_Part_2.mp4'.
 Reading option '-f' ... matched as option 'f' (force format) with argument
 'null'.
 Reading option '/dev/null' ... matched as output file.
 Finished splitting the commandline.
 Parsing a group of options: global .
 Applying option xerror (exit on error) with argument 1.
 Applying option v (set logging level) with argument 9.
 Successfully parsed a group of options.
 Parsing a group of options: input file ./Mill_CPU_for_Humans_-_Part_2.mp4.
 Successfully parsed a group of options.
 Opening an input file: ./Mill_CPU_for_Humans_-_Part_2.mp4.
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c30680] Format mov,mp4,m4a,3gp,3g2,mj2
 probed with size=2048 and score=100
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c30680] ISO: File Type Major Brand: mp42
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c30680] Before avformat_find_stream_info()
 pos: 322624 bytes read:345903 seeks:0
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c30680] All info found
 [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c30680] After avformat_find_stream_info()
 pos: 571520 bytes read:587940 seeks:0 frames:14
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './Mill_CPU_for_Humans_-
 _Part_2.mp4':
   Metadata:
     major_brand     : mp42
     minor_version   : 0
     compatible_brands: isommp42
     creation_time   : 2013-11-19 11:10:06
   Duration: 00:17:25.41, start: 0.000000, bitrate: 189 kb/s
     Stream #0:0(und), 13, 1/50: Video: h264 (High) (avc1 / 0x31637661),
 yuv420p(left), 1280x720, 1/50, 1118 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc
 (default)
     Metadata:
       handler_name    : VideoHandler
     Stream #0:1(und), 1, 1/44100: Audio: aac (LC) (mp4a / 0x6134706D),
 44100 Hz, stereo, fltp, 191 kb/s (default)
     Metadata:
       creation_time   : 2013-11-19 11:10:26
       handler_name    : IsoMedia File Produced by Google, 5-11-2011
 Successfully opened the file.
 Parsing a group of options: output file /dev/null.
 Applying option f (force format) with argument null.
 Successfully parsed a group of options.
 Opening an output file: /dev/null.
 Successfully opened the file.
 detected 4 logical cores
 [graph 0 input from stream 0:0 @ 0x1c1b920] Setting 'video_size' to value
 '1280x720'
 [graph 0 input from stream 0:0 @ 0x1c1b920] Setting 'pix_fmt' to value '0'
 [graph 0 input from stream 0:0 @ 0x1c1b920] Setting 'time_base' to value
 '1/50'
 [graph 0 input from stream 0:0 @ 0x1c1b920] Setting 'pixel_aspect' to
 value '0/1'
 [graph 0 input from stream 0:0 @ 0x1c1b920] Setting 'sws_param' to value
 'flags=2'
 [graph 0 input from stream 0:0 @ 0x1c1b920] Setting 'frame_rate' to value
 '25/1'
 [graph 0 input from stream 0:0 @ 0x1c1b920] w:1280 h:720 pixfmt:yuv420p
 tb:1/50 fr:25/1 sar:0/1 sws_param:flags=2
 [AVFilterGraph @ 0x1eff040] query_formats: 3 queried, 2 merged, 0 already
 done, 0 delayed
 [graph 1 input from stream 0:1 @ 0x1dc62c0] Setting 'time_base' to value
 '1/44100'
 [graph 1 input from stream 0:1 @ 0x1dc62c0] Setting 'sample_rate' to value
 '44100'
 [graph 1 input from stream 0:1 @ 0x1dc62c0] Setting 'sample_fmt' to value
 'fltp'
 [graph 1 input from stream 0:1 @ 0x1dc62c0] Setting 'channel_layout' to
 value '0x3'
 [graph 1 input from stream 0:1 @ 0x1dc62c0] tb:1/44100 samplefmt:fltp
 samplerate:44100 chlayout:0x3
 [audio format for output stream 0:1 @ 0x1dc6fa0] Setting 'sample_fmts' to
 value 's16'
 [audio format for output stream 0:1 @ 0x1dc6fa0] auto-inserting filter
 'auto-inserted resampler 0' between the filter 'Parsed_anull_0' and the
 filter 'audio format for output stream 0:1'
 [AVFilterGraph @ 0x1c1bcc0] query_formats: 4 queried, 6 merged, 3 already
 done, 0 delayed
 [auto-inserted resampler 0 @ 0x1dc90c0] ch:2 chl:stereo fmt:fltp r:44100Hz
 -> ch:2 chl:stereo fmt:s16 r:44100Hz
 Output #0, null, to '/dev/null':
   Metadata:
     major_brand     : mp42
     minor_version   : 0
     compatible_brands: isommp42
     encoder         : Lavf56.25.101
     Stream #0:0(und), 0, 1/25: Video: rawvideo (I420 / 0x30323449),
 yuv420p(left), 1280x720, 1/25, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
 (default)
     Metadata:
       handler_name    : VideoHandler
       encoder         : Lavc56.26.100 rawvideo
     Stream #0:1(und), 0, 1/44100: Audio: pcm_s16le, 44100 Hz, stereo, s16,
 1411 kb/s (default)
     Metadata:
       creation_time   : 2013-11-19 11:10:26
       handler_name    : IsoMedia File Produced by Google, 5-11-2011
       encoder         : Lavc56.26.100 pcm_s16le
 Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
   Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native))
 Press [q] to stop, [?] for help
 [null @ 0x1e80840] Encoder did not produce proper pts, making some up.
 [h264 @ 0x1c32dc0] AVC: nal size 5421me=00:02:24.07 bitrate=N/A
 [h264 @ 0x1c32dc0] no frame!
 Error while decoding stream #0:0: Invalid data found when processing input
 [AVIOContext @ 0x1c2fa40] Statistics: 24822333 bytes read, 0 seeks
 Conversion failed!
 1
 }}}

 The sample is available at [2].

 1: https://bugs.debian.org/780344
 2: http://ge.tt/2L51cAC2/v/0

--
Ticket URL: <https://trac.ffmpeg.org/ticket/4370>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list