[FFmpeg-trac] #3947(undetermined:new): Inconsistent and confusing setting of refs with libx264

FFmpeg trac at avcodec.org
Fri Sep 12 21:04:14 CEST 2014


#3947: Inconsistent and confusing setting of refs with libx264
-------------------------------------+-------------------------------------
             Reporter:               |                     Type:  defect
  francois.visagie@…                 |                 Priority:  normal
               Status:  new          |                  Version:  git-
            Component:               |  master
  undetermined                       |               Blocked By:
             Keywords:  libx264      |  Reproduced by developer:  0
  level refs                         |
             Blocking:               |
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 Summary of the bug:

 1. '-x264opts level=x.y' is documented but does not set refs correctly
 2. '-level x.y' sets refs correctly but is not documented

 How to reproduce:

 Default behaviour:
 {{{
 ffmpeg -i _640.360.25.avi -preset veryslow output.default.mp4
 ffmpeg version N-66232-g5e3da25 Copyright (c) 2000-2014 the FFmpeg
 developers
   built on Sep 10 2014 22:01:59 with gcc 4.8.3 (GCC)
   configuration: --enable-gpl --enable-version3 --disable-w32threads
 --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r
 --enable-gnutls --enab
 le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-
 libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-
 libilbc --enable-lib
 modplug --enable-libmp3lame --enable-libopencore-amrnb --enable-
 libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp
 --enable-libschroedinge
 r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-
 libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-
 amrwbenc --enable-libvorbis
  --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264
 --enable-libx265 --enable-libxavs --enable-libxvid --enable-decklink
 --enable-zlib
   libavutil      54.  7.100 / 54.  7.100
   libavcodec     56.  1.100 / 56.  1.100
   libavformat    56.  4.101 / 56.  4.101
   libavdevice    56.  0.100 / 56.  0.100
   libavfilter     5.  1.100 /  5.  1.100
   libswscale      3.  0.100 /  3.  0.100
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  0.100 / 53.  0.100
 Guessed Channel Layout for  Input Stream #0.1 : stereo
 Input #0, avi, from '_640.360.25.avi':
   Duration: 00:00:10.00, start: 0.000000, bitrate: 7561 kb/s
     Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID /
 0x44495658), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 6031 kb/s, 25 fps, 25
 tbr, 25 tbn, 25 tbc
     Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 2
 channels, s16, 1536 kb/s
 [libx264 @ 0364f380] using SAR=1/1
 [libx264 @ 0364f380] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
 AVX
 [libx264 @ 0364f380] profile High, level 3.1
 [libx264 @ 0364f380] 264 - core 142 r2479 dd79a61 - H.264/MPEG-4 AVC codec
 - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options:
 cabac=1 ref=16 de
 block=1:0:0 analyse=0x3:0x133 me=umh subme=10 psy=1 psy_rd=1.00:0.00
 mixed_ref=1 me_range=24 chroma_me=1 trellis=2 8x8dct=1 cqm=0
 deadzone=21,11 fast_pskip=1 ch
 roma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0
 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=8
 b_pyramid=2 b_adapt=
 2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250
 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=60 rc=crf mbtree=1
 crf=23.0 qcomp=0.60 qpmi
 n=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
 Output #0, mp4, to 'output.default.mp4':
   Metadata:
     encoder         : Lavf56.4.101
     Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p,
 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 25 fps, 12800 tbn, 25 tbc
     Metadata:
       encoder         : Lavc56.1.100 libx264
     Stream #0:1: Audio: aac (libvo_aacenc) ([64][0][0][0] / 0x0040), 48000
 Hz, stereo, s16, 128 kb/s
     Metadata:
       encoder         : Lavc56.1.100 libvo_aacenc
 Stream mapping:
   Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (libx264))
   Stream #0:1 -> #0:1 (pcm_s16le (native) -> aac (libvo_aacenc))
 Press [q] to stop, [?] for help
 frame=  251 fps= 15 q=-1.0 Lsize=    1184kB time=00:00:10.01 bitrate=
 968.6kbits/s dup=1 drop=0
 video:1019kB audio:157kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 0.723548%
 [libx264 @ 0364f380] frame I:2     Avg QP:25.09  size: 36162
 [libx264 @ 0364f380] frame P:60    Avg QP:24.47  size: 12750
 [libx264 @ 0364f380] frame B:189   Avg QP:31.31  size:  1085
 [libx264 @ 0364f380] consecutive B-frames:  0.8%  6.4% 12.0% 33.5% 13.9%
 33.5%  0.0%  0.0%  0.0%
 [libx264 @ 0364f380] mb I  I16..4:  4.0% 77.1% 18.9%
 [libx264 @ 0364f380] mb P  I16..4:  0.4%  1.3%  0.4%  P16..4: 36.6% 20.6%
 30.7%  3.7%  1.5%    skip: 4.8%
 [libx264 @ 0364f380] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 47.7%  4.8%
 1.7%  direct: 1.3%  skip:44.4%  L0:41.8% L1:40.5% BI:17.7%
 [libx264 @ 0364f380] 8x8 transform intra:70.9% inter:53.0%
 [libx264 @ 0364f380] direct mvs  spatial:97.4% temporal:2.6%
 [libx264 @ 0364f380] coded y,uvDC,uvAC intra: 81.8% 78.8% 40.8% inter:
 14.5% 11.3% 2.0%
 [libx264 @ 0364f380] i16 v,h,dc,p: 41% 17% 28% 14%
 [libx264 @ 0364f380] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 10% 18%  8% 10%
 10%  9%  9% 11%
 [libx264 @ 0364f380] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16%  6%  6% 10% 13%
 13% 12% 12% 13%
 [libx264 @ 0364f380] i8c dc,h,v,p: 28% 28% 31% 13%
 [libx264 @ 0364f380] Weighted P-Frames: Y:18.3% UV:10.0%
 [libx264 @ 0364f380] ref P L0: 58.5% 17.3%  8.4%  4.3%  1.8%  2.6%  1.3%
 1.3%  0.7%  0.9%  0.5%  0.5%  0.5%  0.5%  0.4%  0.5%
 [libx264 @ 0364f380] ref B L0: 91.8%  3.9%  2.0%  0.5%  0.5%  0.3%  0.2%
 0.1%  0.2%  0.1%  0.1%  0.1%  0.1%  0.1%  0.0%
 [libx264 @ 0364f380] ref B L1: 95.5%  4.5%
 [libx264 @ 0364f380] kb/s:830.51
 }}}
 {{{
 Expected default refs value: 16
 Actual refs value:           16
 }}}
 Documented '-x264opts level=x.y' option:
 {{{
 ffmpeg -i _640.360.25.avi -preset veryslow -x264opts level=3.0 output.--
 level3.0.mp4
 ffmpeg version N-66232-g5e3da25 Copyright (c) 2000-2014 the FFmpeg
 developers
   built on Sep 10 2014 22:01:59 with gcc 4.8.3 (GCC)
   configuration: --enable-gpl --enable-version3 --disable-w32threads
 --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r
 --enable-gnutls --enab
 le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-
 libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-
 libilbc --enable-lib
 modplug --enable-libmp3lame --enable-libopencore-amrnb --enable-
 libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp
 --enable-libschroedinge
 r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-
 libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-
 amrwbenc --enable-libvorbis
  --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264
 --enable-libx265 --enable-libxavs --enable-libxvid --enable-decklink
 --enable-zlib
   libavutil      54.  7.100 / 54.  7.100
   libavcodec     56.  1.100 / 56.  1.100
   libavformat    56.  4.101 / 56.  4.101
   libavdevice    56.  0.100 / 56.  0.100
   libavfilter     5.  1.100 /  5.  1.100
   libswscale      3.  0.100 /  3.  0.100
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  0.100 / 53.  0.100
 Guessed Channel Layout for  Input Stream #0.1 : stereo
 Input #0, avi, from '_640.360.25.avi':
   Duration: 00:00:10.00, start: 0.000000, bitrate: 7561 kb/s
     Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID /
 0x44495658), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 6031 kb/s, 25 fps, 25
 tbr, 25 tbn, 25 tbc
     Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 2
 channels, s16, 1536 kb/s
 [libx264 @ 0429e880] using SAR=1/1
 [libx264 @ 0429e880] DPB size (16 frames, 14720 mbs) > level limit (8
 frames, 8100 mbs)
 [libx264 @ 0429e880] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
 AVX
 [libx264 @ 0429e880] profile High, level 3.0
 [libx264 @ 0429e880] 264 - core 142 r2479 dd79a61 - H.264/MPEG-4 AVC codec
 - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options:
 cabac=1 ref=16 de
 block=1:0:0 analyse=0x3:0x133 me=umh subme=10 psy=1 psy_rd=1.00:0.00
 mixed_ref=1 me_range=24 chroma_me=1 trellis=2 8x8dct=1 cqm=0
 deadzone=21,11 fast_pskip=1 ch
 roma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0
 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=8
 b_pyramid=2 b_adapt=
 2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250
 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=60 rc=crf mbtree=1
 crf=23.0 qcomp=0.60 qpmi
 n=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
 Output #0, mp4, to 'output.--level3.0.mp4':
   Metadata:
     encoder         : Lavf56.4.101
     Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p,
 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 25 fps, 12800 tbn, 25 tbc
     Metadata:
       encoder         : Lavc56.1.100 libx264
     Stream #0:1: Audio: aac (libvo_aacenc) ([64][0][0][0] / 0x0040), 48000
 Hz, stereo, s16, 128 kb/s
     Metadata:
       encoder         : Lavc56.1.100 libvo_aacenc
 Stream mapping:
   Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (libx264))
   Stream #0:1 -> #0:1 (pcm_s16le (native) -> aac (libvo_aacenc))
 Press [q] to stop, [?] for help
 frame=  251 fps= 15 q=-1.0 Lsize=    1184kB time=00:00:10.01 bitrate=
 968.7kbits/s dup=1 drop=0
 video:1019kB audio:157kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 0.723486%
 [libx264 @ 0429e880] frame I:2     Avg QP:25.09  size: 36162
 [libx264 @ 0429e880] frame P:60    Avg QP:24.47  size: 12748
 [libx264 @ 0429e880] frame B:189   Avg QP:31.30  size:  1085
 [libx264 @ 0429e880] consecutive B-frames:  0.8%  6.4% 12.0% 33.5% 13.9%
 33.5%  0.0%  0.0%  0.0%
 [libx264 @ 0429e880] mb I  I16..4:  4.0% 77.1% 18.9%
 [libx264 @ 0429e880] mb P  I16..4:  0.4%  1.3%  0.4%  P16..4: 36.6% 20.6%
 30.7%  3.7%  1.5%    skip: 4.9%
 [libx264 @ 0429e880] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 47.7%  4.8%
 1.7%  direct: 1.3%  skip:44.4%  L0:41.8% L1:40.5% BI:17.7%
 [libx264 @ 0429e880] 8x8 transform intra:70.9% inter:53.0%
 [libx264 @ 0429e880] direct mvs  spatial:97.4% temporal:2.6%
 [libx264 @ 0429e880] coded y,uvDC,uvAC intra: 81.8% 78.9% 40.8% inter:
 14.5% 11.3% 2.0%
 [libx264 @ 0429e880] i16 v,h,dc,p: 41% 17% 28% 14%
 [libx264 @ 0429e880] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 10% 18%  8% 10%
 10%  9%  9% 11%
 [libx264 @ 0429e880] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15%  6%  6% 10% 13%
 12% 12% 12% 13%
 [libx264 @ 0429e880] i8c dc,h,v,p: 28% 28% 31% 13%
 [libx264 @ 0429e880] Weighted P-Frames: Y:18.3% UV:10.0%
 [libx264 @ 0429e880] ref P L0: 58.5% 17.3%  8.4%  4.3%  1.8%  2.6%  1.3%
 1.3%  0.7%  0.9%  0.5%  0.6%  0.5%  0.5%  0.4%  0.5%
 [libx264 @ 0429e880] ref B L0: 91.8%  3.9%  2.0%  0.6%  0.5%  0.3%  0.2%
 0.1%  0.2%  0.1%  0.1%  0.1%  0.1%  0.1%  0.0%
 [libx264 @ 0429e880] ref B L1: 95.5%  4.5%
 [libx264 @ 0429e880] kb/s:830.59
 }}}
 {{{
 Expected refs value:  8
 Actual refs value:   16
 }}}
 Undocumented '-level x.y' option:

 {{{
 ffmpeg -i _640.360.25.avi -preset veryslow -level 3.0 output.-level3.0.mp4
 ffmpeg version N-66232-g5e3da25 Copyright (c) 2000-2014 the FFmpeg
 developers
   built on Sep 10 2014 22:01:59 with gcc 4.8.3 (GCC)
   configuration: --enable-gpl --enable-version3 --disable-w32threads
 --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r
 --enable-gnutls --enab
 le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-
 libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-
 libilbc --enable-lib
 modplug --enable-libmp3lame --enable-libopencore-amrnb --enable-
 libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp
 --enable-libschroedinge
 r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-
 libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-
 amrwbenc --enable-libvorbis
  --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264
 --enable-libx265 --enable-libxavs --enable-libxvid --enable-decklink
 --enable-zlib
   libavutil      54.  7.100 / 54.  7.100
   libavcodec     56.  1.100 / 56.  1.100
   libavformat    56.  4.101 / 56.  4.101
   libavdevice    56.  0.100 / 56.  0.100
   libavfilter     5.  1.100 /  5.  1.100
   libswscale      3.  0.100 /  3.  0.100
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  0.100 / 53.  0.100
 Guessed Channel Layout for  Input Stream #0.1 : stereo
 Input #0, avi, from '_640.360.25.avi':
   Duration: 00:00:10.00, start: 0.000000, bitrate: 7561 kb/s
     Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID /
 0x44495658), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 6031 kb/s, 25 fps, 25
 tbr, 25 tbn, 25 tbc
     Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 2
 channels, s16, 1536 kb/s
 [libx264 @ 041af7e0] using SAR=1/1
 [libx264 @ 041af7e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
 AVX
 [libx264 @ 041af7e0] profile High, level 3.0
 [libx264 @ 041af7e0] 264 - core 142 r2479 dd79a61 - H.264/MPEG-4 AVC codec
 - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options:
 cabac=1 ref=8 deb
 lock=1:0:0 analyse=0x3:0x133 me=umh subme=10 psy=1 psy_rd=1.00:0.00
 mixed_ref=1 me_range=24 chroma_me=1 trellis=2 8x8dct=1 cqm=0
 deadzone=21,11 fast_pskip=1 chr
 oma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0
 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=8
 b_pyramid=2 b_adapt=2
  b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25
 scenecut=40 intra_refresh=0 rc_lookahead=60 rc=crf mbtree=1 crf=23.0
 qcomp=0.60 qpmin
 =0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
 Output #0, mp4, to 'output.-level3.0.mp4':
   Metadata:
     encoder         : Lavf56.4.101
     Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p,
 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 25 fps, 12800 tbn, 25 tbc
     Metadata:
       encoder         : Lavc56.1.100 libx264
     Stream #0:1: Audio: aac (libvo_aacenc) ([64][0][0][0] / 0x0040), 48000
 Hz, stereo, s16, 128 kb/s
     Metadata:
       encoder         : Lavc56.1.100 libvo_aacenc
 Stream mapping:
   Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (libx264))
   Stream #0:1 -> #0:1 (pcm_s16le (native) -> aac (libvo_aacenc))
 Press [q] to stop, [?] for help
 frame=  251 fps= 20 q=-1.0 Lsize=    1189kB time=00:00:10.01 bitrate=
 972.8kbits/s dup=1 drop=0
 video:1024kB audio:157kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 0.720318%
 [libx264 @ 041af7e0] frame I:2     Avg QP:25.09  size: 36162
 [libx264 @ 041af7e0] frame P:60    Avg QP:24.47  size: 12846
 [libx264 @ 041af7e0] frame B:189   Avg QP:31.33  size:  1082
 [libx264 @ 041af7e0] consecutive B-frames:  0.8%  6.4% 12.0% 33.5% 13.9%
 33.5%  0.0%  0.0%  0.0%
 [libx264 @ 041af7e0] mb I  I16..4:  4.0% 77.1% 18.9%
 [libx264 @ 041af7e0] mb P  I16..4:  0.5%  1.2%  0.4%  P16..4: 36.3% 20.6%
 30.8%  3.8%  1.6%    skip: 4.8%
 [libx264 @ 041af7e0] mb B  I16..4:  0.0%  0.1%  0.0%  B16..8: 48.1%  4.7%
 1.5%  direct: 1.3%  skip:44.3%  L0:41.3% L1:40.7% BI:18.0%
 [libx264 @ 041af7e0] 8x8 transform intra:68.7% inter:52.3%
 [libx264 @ 041af7e0] direct mvs  spatial:97.4% temporal:2.6%
 [libx264 @ 041af7e0] coded y,uvDC,uvAC intra: 80.8% 78.4% 39.7% inter:
 14.6% 11.3% 2.0%
 [libx264 @ 041af7e0] i16 v,h,dc,p: 43% 17% 25% 15%
 [libx264 @ 041af7e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 10% 18%  8% 10%
 10% 10%  9% 11%
 [libx264 @ 041af7e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16%  6%  6% 10% 12%
 13% 11% 12% 13%
 [libx264 @ 041af7e0] i8c dc,h,v,p: 29% 27% 31% 14%
 [libx264 @ 041af7e0] Weighted P-Frames: Y:18.3% UV:10.0%
 [libx264 @ 041af7e0] ref P L0: 59.9% 17.9%  8.6%  4.8%  2.1%  3.1%  1.5%
 1.9%  0.2%  0.0%
 [libx264 @ 041af7e0] ref B L0: 92.3%  4.0%  2.1%  0.5%  0.6%  0.3%  0.1%
 [libx264 @ 041af7e0] ref B L1: 95.5%  4.5%
 [libx264 @ 041af7e0] kb/s:834.70
 }}}
 {{{
 Expected refs value: 8
 Actual refs value:   8
 }}}

 Arguably the most consistent fix would be to correct '-x264opts level=x.y'
 to behave like '-level x.y', and for '-level x.y' to also be documented.

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


More information about the FFmpeg-trac mailing list