[FFmpeg-trac] #658(undetermined:new): auto-select yuv420p for RGB inputs with libx264

FFmpeg trac at avcodec.org
Tue Nov 15 22:09:08 CET 2011


#658: auto-select yuv420p for RGB inputs with libx264
-------------------------------------+-------------------------------------
               Reporter:  llogan     |                  Owner:
                   Type:             |                 Status:  new
  enhancement                        |              Component:
               Priority:  wish       |  undetermined
                Version:  git-       |               Keywords:
  master                             |               Blocking:
             Blocked By:             |  Analyzed by developer:  0
Reproduced by developer:  0          |
-------------------------------------+-------------------------------------
 I've noticed an increasing number of users wondering why their outputs are
 not playing normally in some video players, and/or why some profiles won't
 work ("main profile doesn't support 4:4:4" for example). The general
 answer is to tell them to use "-pix_fmt yuv420p". x264 technically
 supports RGB, but I think the vast majority of users will want YUV,
 although they may not know it.

 We closed a few similar reports as invalid (#585 and #601) because the
 current behavior isn't wrong, but it is inconsistent, but now that I see
 more questions about this I think the default behavior should be changed.

 Current behavior:
 {{{
 $ ffmpeg -t 5 -loop 1 -i rgb24.png -vcodec libx264 -preset medium -crf 24
 -y output.mp4
 ffmpeg version N-34884-g7575980, Copyright (c) 2000-2011 the FFmpeg
 developers
   built on Nov 15 2011 11:51:13 with gcc 4.6.2
   configuration: --prefix=/usr --enable-gpl --enable-libx264
   libavutil    51. 25. 0 / 51. 25. 0
   libavcodec   53. 34. 0 / 53. 34. 0
   libavformat  53. 20. 0 / 53. 20. 0
   libavdevice  53.  4. 0 / 53.  4. 0
   libavfilter   2. 48. 1 /  2. 48. 1
   libswscale    2.  1. 0 /  2.  1. 0
   libpostproc  51.  2. 0 / 51.  2. 0
 [image2 @ 0x2566880] max_analyze_duration 5000000 reached at 5000000
 Input #0, image2, from 'rgb24.png':
   Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
     Stream #0:0: Video: png, rgb24, 1000x1000, 25 fps, 25 tbr, 25 tbn, 25
 tbc
 [buffer @ 0x2566800] w:1000 h:1000 pixfmt:rgb24 tb:1/1000000 sar:0/1
 sws_param:
 [libx264 @ 0x256fe80] using cpu capabilities: MMX2 SSE2Fast SSSE3
 FastShuffle SSE4.2
 [libx264 @ 0x256fe80] profile High 4:4:4 Predictive, level 3.2, 4:4:4
 8-bit
 [libx264 @ 0x256fe80] 264 - core 119 r2106 07efeb4 - H.264/MPEG-4 AVC
 codec - Copyleft 2003-2011 - 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=12
 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=crf mbtree=1 crf=24.0 qcomp=0.60
 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
 Output #0, mp4, to 'output.mp4':
   Metadata:
     encoder         : Lavf53.20.0
     Stream #0:0: Video: h264 (![0][0][0] / 0x0021), rgb24, 1000x1000, q=-1
 --1, 25 tbn, 25 tbc
 Stream mapping:
   Stream #0:0 -> #0:0 (png -> libx264)
 Press [q] to stop, [?] for help
 frame=  125 fps= 96 q=-1.0 Lsize=      30kB time=00:00:04.92 bitrate=
 49.2kbits/s
 video:27kB audio:0kB global headers:0kB muxing overhead 10.153522%
 [libx264 @ 0x256fe80] frame I:1     Avg QP:18.84  size: 18603
 [libx264 @ 0x256fe80] frame P:31    Avg QP:31.06  size:   117
 [libx264 @ 0x256fe80] frame B:93    Avg QP:31.85  size:    49
 [libx264 @ 0x256fe80] consecutive B-frames:  0.8%  0.0%  0.0% 99.2%
 [libx264 @ 0x256fe80] mb I  I16..4: 88.5%  5.3%  6.2%
 [libx264 @ 0x256fe80] mb P  I16..4:  1.8%  0.0%  0.0%  P16..4:  0.1%  0.0%
 0.0%  0.0%  0.0%    skip:98.1%
 [libx264 @ 0x256fe80] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  0.3%  0.0%
 0.0%  direct: 0.0%  skip:99.7%  L0:66.9% L1:33.1% BI: 0.0%
 [libx264 @ 0x256fe80] 8x8 transform intra:3.8% inter:36.5%
 [libx264 @ 0x256fe80] coded y,u,v intra: 2.3% 2.2% 2.3% inter: 0.0% 0.0%
 0.0%
 [libx264 @ 0x256fe80] i16 v,h,dc,p: 77% 23%  0%  0%
 [libx264 @ 0x256fe80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 54%  3% 43%  0%  0%
 0%  0%  0%  0%
 [libx264 @ 0x256fe80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 44% 27% 18%  2%  2%
 2%  2%  2%  1%
 [libx264 @ 0x256fe80] Weighted P-Frames: Y:0.0% UV:0.0%
 [libx264 @ 0x256fe80] ref P L0: 51.7%  7.9% 37.1%  3.4%
 [libx264 @ 0x256fe80] ref B L0: 32.4% 65.3%  2.3%
 [libx264 @ 0x256fe80] ref B L1: 98.3%  1.7%
 [libx264 @ 0x256fe80] kb/s:42.84
 }}}

 Re-encoding the output with same settings. Note auto-selecting format
 'yuv420p':
 {{{
 $ ffmpeg -i output.mp4 -vcodec libx264 -preset medium -crf 24 -y out2.mp4
 ffmpeg version N-34884-g7575980, Copyright (c) 2000-2011 the FFmpeg
 developers
   built on Nov 15 2011 11:51:13 with gcc 4.6.2
   configuration: --prefix=/usr --enable-gpl --enable-libx264
   libavutil    51. 25. 0 / 51. 25. 0
   libavcodec   53. 34. 0 / 53. 34. 0
   libavformat  53. 20. 0 / 53. 20. 0
   libavdevice  53.  4. 0 / 53.  4. 0
   libavfilter   2. 48. 1 /  2. 48. 1
   libswscale    2.  1. 0 /  2.  1. 0
   libpostproc  51.  2. 0 / 51.  2. 0
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2avc1mp41
     creation_time   : 1970-01-01 00:00:00
     encoder         : Lavf53.20.0
   Duration: 00:00:05.00, start: 0.000000, bitrate: 48 kb/s
     Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 /
 0x31637661), gbr24p, 1000x1000, 43 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
     Metadata:
       creation_time   : 1970-01-01 00:00:00
       handler_name    :
 Incompatible pixel format 'gbr24p' for codec 'libx264', auto-selecting
 format 'yuv420p'
 [buffer @ 0x1cf1280] w:1000 h:1000 pixfmt:gbr24p tb:1/1000000 sar:0/1
 sws_param:
 [buffersink @ 0x1cf1680] auto-inserting filter 'auto-inserted scale 0'
 between the filter 'src' and the filter 'out'
 [scale @ 0x1cf1b60] w:1000 h:1000 fmt:gbr24p -> w:1000 h:1000 fmt:yuv420p
 flags:0x4
 [libx264 @ 0x1cfd920] using cpu capabilities: MMX2 SSE2Fast SSSE3
 FastShuffle SSE4.2
 [libx264 @ 0x1cfd920] profile High, level 3.2
 [libx264 @ 0x1cfd920] 264 - core 119 r2106 07efeb4 - H.264/MPEG-4 AVC
 codec - Copyleft 2003-2011 - 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=12
 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=crf mbtree=1 crf=24.0 qcomp=0.60
 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
 Output #0, mp4, to 'out2.mp4':
   Metadata:
     major_brand     : isom
     minor_version   : 512
     compatible_brands: isomiso2avc1mp41
     creation_time   : 1970-01-01 00:00:00
     encoder         : Lavf53.20.0
     Stream #0:0(und): Video: h264 (![0][0][0] / 0x0021), yuv420p,
 1000x1000, q=-1--1, 25 tbn, 25 tbc
     Metadata:
       creation_time   : 1970-01-01 00:00:00
       handler_name    :
 Stream mapping:
   Stream #0:0 -> #0:0 (h264 -> libx264)
 Press [q] to stop, [?] for help
 frame=  125 fps= 85 q=-1.0 Lsize=      21kB time=00:00:04.92 bitrate=
 35.3kbits/s
 video:18kB audio:0kB global headers:0kB muxing overhead 14.750026%
 [libx264 @ 0x1cfd920] frame I:1     Avg QP:16.37  size: 12481
 [libx264 @ 0x1cfd920] frame P:32    Avg QP:25.74  size:    65
 [libx264 @ 0x1cfd920] frame B:92    Avg QP:28.95  size:    40
 [libx264 @ 0x1cfd920] consecutive B-frames:  1.6%  0.0%  2.4% 96.0%
 [libx264 @ 0x1cfd920] mb I  I16..4: 93.1%  0.1%  6.9%
 [libx264 @ 0x1cfd920] mb P  I16..4:  0.1%  0.0%  0.0%  P16..4:  0.1%  0.0%
 0.0%  0.0%  0.0%    skip:99.8%
 [libx264 @ 0x1cfd920] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  0.0%  0.0%
 0.0%  direct: 0.0%  skip:100.0%  L0:36.1% L1:63.9% BI: 0.0%
 [libx264 @ 0x1cfd920] 8x8 transform intra:0.0% inter:57.9%
 [libx264 @ 0x1cfd920] coded y,uvDC,uvAC intra: 4.8% 10.6% 8.5% inter: 0.0%
 0.0% 0.0%
 [libx264 @ 0x1cfd920] i16 v,h,dc,p: 84% 15%  2%  0%
 [libx264 @ 0x1cfd920] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 75% 12% 12%  0%  0%
 0%  0%  0%  0%
 [libx264 @ 0x1cfd920] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 44% 28% 19%  2%  1%
 2%  2%  1%  1%
 [libx264 @ 0x1cfd920] i8c dc,h,v,p: 62% 21% 17%  1%
 [libx264 @ 0x1cfd920] Weighted P-Frames: Y:0.0% UV:0.0%
 [libx264 @ 0x1cfd920] ref P L0: 66.7%  1.7% 25.8%  5.8%
 [libx264 @ 0x1cfd920] ref B L0: 78.6% 14.3%  7.1%
 [libx264 @ 0x1cfd920] ref B L1: 94.9%  5.1%
 [libx264 @ 0x1cfd920] kb/s:29.14
 }}}

 Also, default behavior of x264 is to choose yuv420p:

 {{{
 $ x264 rgb24.png -o output.h264
 Using network protocols without global network initialization. Please use
 avformat_network_init(), this will become mandatory later.
 Using network protocols without global network initialization. Please use
 avformat_network_init(), this will become mandatory later.
 lavf [info]: 1000x1000p 0:1 @ 25/1 fps (vfr)
 resize [warning]: converting from rgb24 to yuv420p
 x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle
 SSE4.2
 x264 [info]: profile High, level 3.2
 [swscaler @ 0x2f16820] Warning: data is not aligned! This can lead to a
 speedloss
 x264 [info]: frame I:1     Avg QP:25.53  size:  7473
 x264 [info]: mb I  I16..4: 88.8%  5.4%  5.8%
 x264 [info]: 8x8 transform intra:5.4%
 x264 [info]: coded y,uvDC,uvAC intra: 3.6% 8.4% 2.7%
 x264 [info]: i16 v,h,dc,p: 79% 19%  2%  0%
 x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  2%  0% 98%  0%  0%  0%  0%
 0%  0%
 x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 43% 27% 20%  1%  2%  2%  2%
 2%  2%
 x264 [info]: i8c dc,h,v,p: 78%  9% 12%  1%
 x264 [info]: kb/s:1494.60

 encoded 1 frames, 25.58 fps, 1494.60 kb/s
 }}}

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


More information about the FFmpeg-trac mailing list