[FFmpeg-trac] #5493(avfilter:new): incomplete x264 MB tree with framerate filter

FFmpeg trac at avcodec.org
Fri Apr 29 18:43:38 CEST 2016


#5493: incomplete x264 MB tree with framerate filter
-------------------------------------+-------------------------------------
             Reporter:  blacktrash   |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:  avfilter     |                  Version:  git-
             Keywords:  framerate    |  master
  libx264                            |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 Summary of the bug:
 Depending on (weird) input frame rates and chosen framerate filter frame
 rate and other circumstances, the framerate filter results in an
 incomplete MB tree 1st pass stats file.

 How to reproduce:
 {{{
 $ ffprobe -select_streams v -show_entries
 stream=r_frame_rate,avg_frame_rate oldphone.mp4
 ffprobe version N-79691-g66dd21d Copyright (c) 2007-2016 the FFmpeg
 developers
   built with Apple LLVM version 7.0.2 (clang-700.1.81)
   configuration: --enable-gpl --enable-nonfree --disable-ffserver
 --enable-shared --enable-openssl --enable-libspeex --enable-libopus
 --enable-libfdk-aac --enable-libx265 --enable-libx264 --enable-libxvid
 --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis
 --enable-libvpx --enable-libvidstab --extra-cflags=-I/sw/include --extra-
 libs=-L/sw/lib
   libavutil      55. 23.100 / 55. 23.100
   libavcodec     57. 38.100 / 57. 38.100
   libavformat    57. 34.103 / 57. 34.103
   libavdevice    57.  0.101 / 57.  0.101
   libavfilter     6. 44.100 /  6. 44.100
   libswscale      4.  1.100 /  4.  1.100
   libswresample   2.  0.101 /  2.  0.101
   libpostproc    54.  0.100 / 54.  0.100
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'oldphone.mp4':
   Metadata:
     major_brand     : mp42
     minor_version   : 0
     compatible_brands: isommp42
     creation_time   : 2016-04-24 09:48:33
     location        : +60.4916+022.2685/
     location-eng    : +60.4916+022.2685/
     com.android.version: 6.0.1
   Duration: 00:00:52.12, start: 0.000000, bitrate: 15880 kb/s
     Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
 1920x1080, 15715 kb/s, SAR 1:1 DAR 16:9, 25.48 fps, 90k tbr, 90k tbn
 (default)
     Metadata:
       creation_time   : 2016-04-24 09:48:33
       handler_name    : VideoHandle
     Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz,
 stereo, fltp, 196 kb/s (default)
     Metadata:
       creation_time   : 2016-04-24 09:48:33
       handler_name    : SoundHandle
 [STREAM]
 r_frame_rate=180000/2
 avg_frame_rate=14906250/584969
 [/STREAM]
 $ ffmpeg -i oldphone.mp4 -filter:v framerate=30,scale=640:360 -b:v 500k
 -pass 1 -y
 test.mp4
 ffmpeg version N-79691-g66dd21d Copyright (c) 2000-2016 the FFmpeg
 developers
   built with Apple LLVM version 7.0.2 (clang-700.1.81)
   configuration: --enable-gpl --enable-nonfree --disable-ffserver
 --enable-shared --enable-openssl --enable-libspeex --enable-libopus
 --enable-libfdk-aac --enable-libx265 --enable-libx264 --enable-libxvid
 --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis
 --enable-libvpx --enable-libvidstab --extra-cflags=-I/sw/include --extra-
 libs=-L/sw/lib
   libavutil      55. 23.100 / 55. 23.100
   libavcodec     57. 38.100 / 57. 38.100
   libavformat    57. 34.103 / 57. 34.103
   libavdevice    57.  0.101 / 57.  0.101
   libavfilter     6. 44.100 /  6. 44.100
   libswscale      4.  1.100 /  4.  1.100
   libswresample   2.  0.101 /  2.  0.101
   libpostproc    54.  0.100 / 54.  0.100
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'oldphone.mp4':
   Metadata:
     major_brand     : mp42
     minor_version   : 0
     compatible_brands: isommp42
     creation_time   : 2016-04-24 09:48:33
     location        : +60.4916+022.2685/
     location-eng    : +60.4916+022.2685/
     com.android.version: 6.0.1
   Duration: 00:00:52.12, start: 0.000000, bitrate: 15880 kb/s
     Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
 1920x1080, 15715 kb/s, SAR 1:1 DAR 16:9, 25.48 fps, 90k tbr, 90k tbn
 (default)
     Metadata:
       creation_time   : 2016-04-24 09:48:33
       handler_name    : VideoHandle
     Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz,
 stereo, fltp, 196 kb/s (default)
     Metadata:
       creation_time   : 2016-04-24 09:48:33
       handler_name    : SoundHandle
 [Parsed_framerate_0 @ 0x7fccb2700000] time base:1/90000 -> 1/90000 exact:1
 [Parsed_framerate_0 @ 0x7fccb2700000] fps -> fps:30/1 scene score:7.000000
 interpolate start:15 end:240
 [libx264 @ 0x7fccb2812e00] using SAR=1/1
 [libx264 @ 0x7fccb2812e00] using cpu capabilities: MMX2 SSE2Fast SSSE3
 SSE4.2 AVX
 [libx264 @ 0x7fccb2812e00] profile Main, level 3.0
 [libx264 @ 0x7fccb2812e00] 264 - core 148 r2694 3b70645 - H.264/MPEG-4 AVC
 codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options:
 cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0 me=dia subme=2 psy=1
 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0
 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=11
 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0
 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25
 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=500
 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
 [mp4 @ 0x7fccb2811c00] Using AVStream.codec to pass codec parameters to
 muxers is deprecated, use AVStream.codecpar instead.
     Last message repeated 1 times
 Output #0, mp4, to 'test.mp4':
   Metadata:
     major_brand     : mp42
     minor_version   : 0
     compatible_brands: isommp42
     com.android.version: 6.0.1
     location        : +60.4916+022.2685/
     location-eng    : +60.4916+022.2685/
     encoder         : Lavf57.34.103
     Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv420p,
 640x360 [SAR 1:1 DAR 16:9], q=2-31, 500 kb/s, 30 fps, 15360 tbn (default)
     Metadata:
       creation_time   : 2016-04-24 09:48:33
       handler_name    : VideoHandle
       encoder         : Lavc57.38.100 libx264
     Side data:
       cpb: bitrate max/min/avg: 0/0/500000 buffer size: 0 vbv_delay: -1
     Stream #0:1(eng): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz,
 stereo, fltp, 128 kb/s (default)
     Metadata:
       creation_time   : 2016-04-24 09:48:33
       handler_name    : SoundHandle
       encoder         : Lavc57.38.100 aac
 Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
   Stream #0:1 -> #0:1 (aac (native) -> aac (native))
 Press [q] to stop, [?] for help
 frame= 1559 fps=137 q=-1.0 Lsize=    3989kB time=00:00:52.12 bitrate=
 627.0kbits/s speed=4.58x
 video:3119kB audio:813kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 1.448805%
 [libx264 @ 0x7fccb2812e00] frame I:12    Avg QP:24.46  size:  8829
 [libx264 @ 0x7fccb2812e00] frame P:419   Avg QP:26.64  size:  4157
 [libx264 @ 0x7fccb2812e00] frame B:1128  Avg QP:29.56  size:  1193
 [libx264 @ 0x7fccb2812e00] consecutive B-frames:  1.9%  3.0%  6.2% 89.0%
 [libx264 @ 0x7fccb2812e00] mb I  I16..4: 49.9%  0.0% 50.1%
 [libx264 @ 0x7fccb2812e00] mb P  I16..4: 23.3%  0.0%  0.0%  P16..4: 49.3%
 0.0%  0.0%  0.0%  0.0%    skip:27.3%
 [libx264 @ 0x7fccb2812e00] mb B  I16..4:  3.4%  0.0%  0.0%  B16..8: 19.2%
 0.0%  0.0%  direct: 7.1%  skip:70.3%  L0:35.8% L1:43.1% BI:21.2%
 [libx264 @ 0x7fccb2812e00] final ratefactor: 23.53
 [libx264 @ 0x7fccb2812e00] coded y,uvDC,uvAC intra: 45.2% 40.8% 10.6%
 inter: 9.6% 8.2% 0.3%
 [libx264 @ 0x7fccb2812e00] i16 v,h,dc,p: 74% 13%  7%  6%
 [libx264 @ 0x7fccb2812e00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 43% 27% 10%  3%
 3%  4%  3%  3%  5%
 [libx264 @ 0x7fccb2812e00] i8c dc,h,v,p: 48% 16% 31%  6%
 [libx264 @ 0x7fccb2812e00] Weighted P-Frames: Y:14.6% UV:3.6%
 [libx264 @ 0x7fccb2812e00] kb/s:491.59
 [aac @ 0x7fccb2814600] Qavg: 1142.250
 $ ffmpeg -i oldphone.mp4 -filter:v framerate=30,scale=640:360 -b:v 500k
 -pass 2 -y
 test.mp4
 ffmpeg version N-79691-g66dd21d Copyright (c) 2000-2016 the FFmpeg
 developers
   built with Apple LLVM version 7.0.2 (clang-700.1.81)
   configuration: --enable-gpl --enable-nonfree --disable-ffserver
 --enable-shared --enable-openssl --enable-libspeex --enable-libopus
 --enable-libfdk-aac --enable-libx265 --enable-libx264 --enable-libxvid
 --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis
 --enable-libvpx --enable-libvidstab --extra-cflags=-I/sw/include --extra-
 libs=-L/sw/lib
   libavutil      55. 23.100 / 55. 23.100
   libavcodec     57. 38.100 / 57. 38.100
   libavformat    57. 34.103 / 57. 34.103
   libavdevice    57.  0.101 / 57.  0.101
   libavfilter     6. 44.100 /  6. 44.100
   libswscale      4.  1.100 /  4.  1.100
   libswresample   2.  0.101 /  2.  0.101
   libpostproc    54.  0.100 / 54.  0.100
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'oldphone.mp4':
   Metadata:
     major_brand     : mp42
     minor_version   : 0
     compatible_brands: isommp42
     creation_time   : 2016-04-24 09:48:33
     location        : +60.4916+022.2685/
     location-eng    : +60.4916+022.2685/
     com.android.version: 6.0.1
   Duration: 00:00:52.12, start: 0.000000, bitrate: 15880 kb/s
     Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
 1920x1080, 15715 kb/s, SAR 1:1 DAR 16:9, 25.48 fps, 90k tbr, 90k tbn
 (default)
     Metadata:
       creation_time   : 2016-04-24 09:48:33
       handler_name    : VideoHandle
     Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz,
 stereo, fltp, 196 kb/s (default)
     Metadata:
       creation_time   : 2016-04-24 09:48:33
       handler_name    : SoundHandle
 [Parsed_framerate_0 @ 0x7fd880600000] time base:1/90000 -> 1/90000 exact:1
 [Parsed_framerate_0 @ 0x7fd880600000] fps -> fps:30/1 scene score:7.000000
 interpolate start:15 end:240
 [libx264 @ 0x7fd88082c000] using SAR=1/1
 [libx264 @ 0x7fd88082c000] using cpu capabilities: MMX2 SSE2Fast SSSE3
 SSE4.2 AVX
 [libx264 @ 0x7fd88082c000] profile High, level 3.0
 [libx264 @ 0x7fd88082c000] 264 - core 148 r2694 3b70645 - H.264/MPEG-4 AVC
 codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options:
 cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1
 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1
 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=11
 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0
 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25
 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=2pass mbtree=1 bitrate=500
 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 cplxblur=20.0 qblur=0.5
 ip_ratio=1.40 aq=1:1.00
 [mp4 @ 0x7fd880828c00] Using AVStream.codec to pass codec parameters to
 muxers is deprecated, use AVStream.codecpar instead.
     Last message repeated 1 times
 Output #0, mp4, to 'test.mp4':
   Metadata:
     major_brand     : mp42
     minor_version   : 0
     compatible_brands: isommp42
     com.android.version: 6.0.1
     location        : +60.4916+022.2685/
     location-eng    : +60.4916+022.2685/
     encoder         : Lavf57.34.103
     Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv420p,
 640x360 [SAR 1:1 DAR 16:9], q=2-31, 500 kb/s, 30 fps, 15360 tbn (default)
     Metadata:
       creation_time   : 2016-04-24 09:48:33
       handler_name    : VideoHandle
       encoder         : Lavc57.38.100 libx264
     Side data:
       cpb: bitrate max/min/avg: 0/0/500000 buffer size: 0 vbv_delay: -1
     Stream #0:1(eng): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz,
 stereo, fltp, 128 kb/s (default)
     Metadata:
       creation_time   : 2016-04-24 09:48:33
       handler_name    : SoundHandle
       encoder         : Lavc57.38.100 aac
 Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
   Stream #0:1 -> #0:1 (aac (native) -> aac (native))
 Press [q] to stop, [?] for help
 [libx264 @ 0x7fd88082c000] Incomplete MB-tree stats file.08 bitrate=
 615.3kbits/s speed=3.84x
 Video encoding failed
 [libx264 @ 0x7fd88082c000] frame I:12    Avg QP:24.36  size:  8693
 [libx264 @ 0x7fd88082c000] frame P:416   Avg QP:26.93  size:  3900
 [libx264 @ 0x7fd88082c000] frame B:1117  Avg QP:29.65  size:  1323
 [libx264 @ 0x7fd88082c000] consecutive B-frames:  1.9%  3.0%  6.2% 88.9%
 [libx264 @ 0x7fd88082c000] mb I  I16..4: 18.8% 66.8% 14.3%
 [libx264 @ 0x7fd88082c000] mb P  I16..4:  4.2%  7.9%  2.1%  P16..4: 43.2%
 10.2%  4.5%  0.0%  0.0%    skip:27.8%
 [libx264 @ 0x7fd88082c000] mb B  I16..4:  0.5%  0.7%  0.2%  B16..8: 39.0%
 3.8%  0.9%  direct: 2.3%  skip:52.7%  L0:44.3% L1:49.4% BI: 6.4%
 [libx264 @ 0x7fd88082c000] 8x8 transform intra:56.1% inter:83.0%
 [libx264 @ 0x7fd88082c000] coded y,uvDC,uvAC intra: 57.8% 60.2% 23.1%
 inter: 12.4% 11.7% 0.4%
 [libx264 @ 0x7fd88082c000] i16 v,h,dc,p: 83%  6%  1% 10%
 [libx264 @ 0x7fd88082c000] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 53% 13%  9%  2%
 3%  5%  4%  5%  6%
 [libx264 @ 0x7fd88082c000] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 44% 14%  7%  4%
 6%  9%  6%  6%  5%
 [libx264 @ 0x7fd88082c000] i8c dc,h,v,p: 48% 17% 27%  8%
 [libx264 @ 0x7fd88082c000] Weighted P-Frames: Y:14.2% UV:3.1%
 [libx264 @ 0x7fd88082c000] ref P L0: 50.1% 18.3% 20.3% 10.1%  1.1%
 [libx264 @ 0x7fd88082c000] ref B L0: 85.2% 11.0%  3.8%
 [libx264 @ 0x7fd88082c000] ref B L1: 94.9%  5.1%
 [libx264 @ 0x7fd88082c000] kb/s:497.76
 [aac @ 0x7fd88082d800] Qavg: 1142.847
 [aac @ 0x7fd88082d800] 2 frames left in the queue on closing
 Conversion failed!
 }}}

 This does not happen e.g. with libvpx; I presume because it collects less
 data in its first pass stats.

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


More information about the FFmpeg-trac mailing list