Opened 5 years ago

Last modified 17 months ago

#3409 reopened defect

Impossible to transcode full range RGB videos with libx264, and keep full range + proper colors

Reported by: mzso Owned by:
Priority: normal Component: undetermined
Version: unspecified Keywords:
Cc: dqeswn@gmail.com, rogerdpack@gmail.com Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

I encountered this while trying to transcode screencasted videos with fraps or ut-video streams.

When using yuv444p pixel format I get washed out, too light videos.

"-color_range" has no affect.

People suggested: "-vf colormatrix=bt601:bt709" But it also doesn't have an affect.

x264 itself has issues with RGB full range videos, if I use i444 with it I also get improper output. But if I use "--output-csp rgb" it succeds in encoding a proper output file, though with a large file size.
I can't even achieve this with ffmpeg because it doesn't let me use RGB with libx264: "Incompatible pixel format 'rgb24' for codec 'libx264', auto-selecting format 'yuv444p'"

Attachments (5)

fr-rgb-sample.mkv (1.6 MB) - added by mzso 5 years ago.
Sample of a file with the issue
rgb-source.png (1.8 MB) - added by mzso 5 years ago.
RGB Source screenshot
yuv-x264.png (2.1 MB) - added by mzso 5 years ago.
Screenshot of file encoded to yuv444 with x264 using avisynth with "crf 0"
yuv-ffmpeg-crf0.png (2.1 MB) - added by mzso 5 years ago.
Screenshot of file encoded to yuv444 with ffmpeg/libx264 with "crf 0"
yuv-ffmpeg-crf0-avisynth.png (1.9 MB) - added by mzso 5 years ago.
Screenshot of file encoded to yuv444 with ffmpeg/libx264 using avisynth input with "crf 0"

Change History (25)

comment:1 Changed 5 years ago by cehoyos

To make this a valid ticket, please provide your failing command line together with the complete, uncut console output. To encode to H264 RGB, use -vcodec libx264rgb

comment:2 follow-up: Changed 5 years ago by mzso

Something like this? (Didn't think it shows anything useful)

E:\Videó Felvételek>ffmpeg -i "E:\Videó Felvételek\input.avi"  -acodec copy -vcodec libx264 -preset ultrafast -crf 20 -color_range 2 -pix_fmt yuv444p  out.mkv
ffmpeg version N-60813-g44b22bb Copyright (c) 2000-2014 the FFmpeg developers
  built on Feb 22 2014 03:11:45 with gcc 4.8.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 65.100 / 52. 65.100
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 33.100 / 55. 33.100
  libavdevice    55. 10.100 / 55. 10.100
  libavfilter     4.  1.103 /  4.  1.103
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, avi, from 'E:\Vide├│ Felv├ętelek\input.avi':
  Duration: 00:00:27.27, start: 0.000000, bitrate: 405890 kb/s
    Stream #0:0: Video: utvideo (ULRG / 0x47524C55), rgb24, 1920x1200, 30 fps, 30 tbr, 30 tbn, 30 tbc
    Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 7.1, s16, 5644 kb/s
[libx264 @ 029370e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264 @ 029370e0] profile High 4:4:4 Predictive, level 5.0, 4:4:4 8-bit
[libx264 @ 029370e0] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 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=6 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=20.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
Output #0, matroska, to 'out.mkv':
  Metadata:
    encoder         : Lavf55.33.100
    Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv444p(pc), 1920x1200, q=-1--1, 1k tbn, 30 tbc
    Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 7.1, 5644 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (utvideo -> libx264)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  533 fps= 13 q=-1.0 Lsize=   84544kB time=00:00:27.26 bitrate=25400.1kbits/s
video:65784kB audio:18742kB subtitle:0 data:0 global headers:0kB muxing overhead 0.020164%
[libx264 @ 029370e0] frame I:3     Avg QP:17.00  size:430087
[libx264 @ 029370e0] frame P:530   Avg QP:19.47  size:124665
[libx264 @ 029370e0] mb I  I16..4: 100.0%  0.0%  0.0%
[libx264 @ 029370e0] mb P  I16..4: 16.0%  0.0%  0.0%  P16..4: 47.2%  0.0%  0.0%  0.0%  0.0% skip:36.8%
[libx264 @ 029370e0] coded y,u,v intra: 45.4% 3.6% 4.0% inter: 35.0% 3.6% 3.4%
[libx264 @ 029370e0] i16 v,h,dc,p: 34% 31% 24% 11%
[libx264 @ 029370e0] kb/s:19739.97
Last edited 5 years ago by cehoyos (previous) (diff)

comment:3 in reply to: ↑ 2 ; follow-up: Changed 5 years ago by cehoyos

Replying to mzso:

    Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv444p(pc), 1920x1200, q=-1--1, 1k tbn, 30 tbc

What is the problem now with the output video? You requested MPEG-style colour range (16-235), is something else produced? Or do you want full range?

comment:4 in reply to: ↑ 3 Changed 5 years ago by mzso

Replying to cehoyos:

Replying to mzso:

    Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv444p(pc), 1920x1200, q=-1--1, 1k tbn, 30 tbc

What is the problem now with the output video? You requested MPEG-style colour range (16-235), is something else produced? Or do you want full range?

Yes I want full range.

comment:5 follow-up: Changed 5 years ago by cehoyos

  • Resolution set to invalid
  • Status changed from new to closed

Then please request full range with -pix_fmt yuvj444p.

People suggested:

Where did you ask? This is a bug tracker, not a support forum, please post all usage questions to the user mailing list.

Last edited 5 years ago by cehoyos (previous) (diff)

comment:6 in reply to: ↑ 5 ; follow-up: Changed 5 years ago by mzso

Replying to cehoyos:

The please request full range with -pix_fmt yuvj444p.

"-color_range 2" is supposed to be fullrange according to the help (it actually is according to the renderer just with wrong colors) No-one told me that I should use yuvj444p instead of yuv444p, and it was virtually impossible to figure out from the ffmpeg help and googling
wasn't fruitful. Sorry.
Thanks for the tip again. I get proper video now, albeit with a warning: "[swscaler @ 0400f260] deprecated pixel format used, make sure you did set range correctly"

Where did you ask? This is a bug tracker, not a support forum, please post all usage questions to the user mailing list.

I know. Mostly on doom9. At one point wrote at the ffmpeg irc but that was inactive.

comment:7 in reply to: ↑ 6 Changed 5 years ago by cehoyos

Replying to mzso:

Replying to cehoyos:

Then please request full range with -pix_fmt yuvj444p.

"-color_range 2" is supposed to be fullrange according to the help

The documentation is wrong afaict, see tickets #443 and #3326.
It has never worked for encoding and I am not convinced it is meant to have any effect on encoding.

comment:8 follow-up: Changed 5 years ago by cehoyos

I am curious: Which player do you use for playback?

comment:9 in reply to: ↑ 8 Changed 5 years ago by mzso

Replying to cehoyos:

I am curious: Which player do you use for playback?

Potplayer with LAV Filters + madVR.

comment:10 Changed 5 years ago by mzso

  • Resolution invalid deleted
  • Status changed from closed to reopened

Looks like the colors are not right after all. If I use the colormatrix filter the result just gets worse. A lot of detail loss.

-vcodec libx264 -preset slower -crf 18 -pix_fmt yuvj444p:
http://screenshotcomparison.com/comparison/64322

-vcodec libx264 -preset slower -crf 18 -pix_fmt yuvj444p -vf colormatrix=bt601:bt709:
http://screenshotcomparison.com/comparison/64323

comment:11 follow-up: Changed 5 years ago by cehoyos

Please provide an input sample and your failing command lines together with the complete, uncut console output to make this a valid ticket.

comment:12 in reply to: ↑ 11 Changed 5 years ago by mzso

Replying to cehoyos:

Please provide an input sample and your failing command lines together with the complete, uncut console output to make this a valid ticket.

The input is a 270 MB screencap... Mayble I'll try to remux a few frames or something.

Changed 5 years ago by mzso

Sample of a file with the issue

comment:13 Changed 5 years ago by mzso

A uploaded a two frame file, I remuxed with mkvmerge.

Command line 1:
E:\Videó Felvételek>ffmpeg -i "E:\Videó Felvételek\fr-rgb-sample.mkv" -an -vcodec libx264 -preset slower -crf 18 -pix_fmt yuvj444p fr-rgb-sample-transcode.mkv
ffmpeg version N-60813-g44b22bb Copyright (c) 2000-2014 the FFmpeg developers

built on Feb 22 2014 03:11:45 with gcc 4.8.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-l

ibgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora -
-enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib

libavutil 52. 65.100 / 52. 65.100
libavcodec 55. 52.102 / 55. 52.102
libavformat 55. 33.100 / 55. 33.100
libavdevice 55. 10.100 / 55. 10.100
libavfilter 4. 1.103 / 4. 1.103
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100

Input #0, matroska,webm, from 'E:\Vide+- Felv+ętelek\fr-rgb-sample.mkv':

Metadata:

encoder : libebml v1.3.0 + libmatroska v1.4.1
creation_time : 2014-02-25 17:09:53

Duration: 00:00:00.03, start: 0.000000, bitrate: 395171 kb/s

Stream #0:0: Video: utvideo (ULRG / 0x47524C55), rgb24, 1600x1200, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)

[swscaler @ 027788a0] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 02768980] using SAR=1/1
[libx264 @ 02768980] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle?
[libx264 @ 02768980] profile High 4:4:4 Predictive, level 5.0, 4:4:4 8-bit
[libx264 @ 02768980] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=8 deblock=1:0:0 analyse=0x3:0x133 me=umh subme=9 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 c
hroma_me=1 trellis=2 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=3 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=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=18.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'fr-rgb-sample-transcode.mkv':

Metadata:

encoder : Lavf55.33.100
Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuvj444p, 1600x1200 [SAR 1:1 DAR 4:3], q=-1--1, 1k tbn, 30 tbc (default)

Stream mapping:

Stream #0:0 -> #0:0 (utvideo -> libx264)

Press [q] to stop, ? for help
frame= 1 fps=0.0 q=24.0 Lsize= 97kB time=00:00:00.03 bitrate=24133.3kbits/s
video:97kB audio:0kB subtitle:0 data:0 global headers:0kB muxing overhead 0.589085%
[libx264 @ 02768980] frame I:1 Avg QP:20.97 size: 98237
[libx264 @ 02768980] mb I I16..4: 4.2% 81.3% 14.5%
[libx264 @ 02768980] 8x8 transform intra:81.3%
[libx264 @ 02768980] coded y,u,v intra: 84.7% 19.1% 12.0%
[libx264 @ 02768980] i16 v,h,dc,p: 9% 25% 24% 42%
[libx264 @ 02768980] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 3% 5% 3% 13% 17% 11% 23% 10% 16%
[libx264 @ 02768980] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 4% 8% 3% 10% 15% 9% 25% 9% 16%
[libx264 @ 02768980] kb/s:23576.88

Command line 2:
E:\Videó Felvételek>ffmpeg -i "E:\Videó Felvételek\fr-rgb-sample.mkv" -an -vcodec libx264 -preset slower -crf 18 -pix_fmt yuvj444p -vf colormatrix=bt601:bt709 fr-rgb-sample-transcode-vf.mkv
ffmpeg version N-60813-g44b22bb Copyright (c) 2000-2014 the FFmpeg developers

built on Feb 22 2014 03:11:45 with gcc 4.8.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-l

ibgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora -
-enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib

libavutil 52. 65.100 / 52. 65.100
libavcodec 55. 52.102 / 55. 52.102
libavformat 55. 33.100 / 55. 33.100
libavdevice 55. 10.100 / 55. 10.100
libavfilter 4. 1.103 / 4. 1.103
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100

Input #0, matroska,webm, from 'E:\Vide+- Felv+ętelek\fr-rgb-sample.mkv':

Metadata:

encoder : libebml v1.3.0 + libmatroska v1.4.1
creation_time : 2014-02-25 17:09:53

Duration: 00:00:00.03, start: 0.000000, bitrate: 395171 kb/s

Stream #0:0: Video: utvideo (ULRG / 0x47524C55), rgb24, 1600x1200, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)

[swscaler @ 026d7fc0] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 027e8680] using SAR=1/1
[libx264 @ 027e8680] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle?
[libx264 @ 027e8680] profile High 4:4:4 Predictive, level 5.0, 4:4:4 8-bit
[libx264 @ 027e8680] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=8 deblock=1:0:0 analyse=0x3:0x133 me=umh subme=9 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 c
hroma_me=1 trellis=2 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=3 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=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=18.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'fr-rgb-sample-transcode-vf.mkv':

Metadata:

encoder : Lavf55.33.100
Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuvj444p, 1600x1200 [SAR 1:1 DAR 4:3], q=-1--1, 1k tbn, 30 tbc (default)

Stream mapping:

Stream #0:0 -> #0:0 (utvideo -> libx264)

Press [q] to stop, ? for help
frame= 1 fps=0.0 q=24.0 Lsize= 100kB time=00:00:00.03 bitrate=24715.9kbits/s
video:99kB audio:0kB subtitle:0 data:0 global headers:0kB muxing overhead 0.575121%
[libx264 @ 027e8680] frame I:1 Avg QP:21.02 size:100640
[libx264 @ 027e8680] mb I I16..4: 3.0% 81.8% 15.2%
[libx264 @ 027e8680] 8x8 transform intra:81.8%
[libx264 @ 027e8680] coded y,u,v intra: 86.3% 19.3% 12.4%
[libx264 @ 027e8680] i16 v,h,dc,p: 10% 25% 24% 41%
[libx264 @ 027e8680] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 3% 5% 3% 13% 17% 11% 23% 10% 15%
[libx264 @ 027e8680] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 5% 7% 3% 11% 15% 10% 24% 9% 16%
[libx264 @ 027e8680] kb/s:24153.60

comment:15 follow-up: Changed 5 years ago by cehoyos

Do you test the final output file visually (with a media player) or with another method?

comment:16 in reply to: ↑ 15 Changed 5 years ago by mzso

Replying to cehoyos:

Do you test the final output file visually (with a media player) or with another method?

I tested visually by alternating between images. As it turns out there was an issue with the renderer too which is now fixed. So I re-did the comparisons. The difference is more subtle. But the ffmpeg output is definitely wrong.
Source and encode with x264 and avisynth(indistinguishable):
http://screenshotcomparison.com/comparison/64762

Source and encode with ffmpeg(color abnormalities):
http://screenshotcomparison.com/comparison/64764

Encode with ffmpeg using avisynth (way too dark):
http://abload.de/img/yuv-ffmpeg-crf0-avisyijra0.png
(No matter what I tried the output stayed like this)

Avisynth script:

FFVideoSource("e:\Videó Felvételek\motor2.avi")
ConvertToYV24(matrix="PC.709")

Command line 1:

E:\Videó Felvételek>x264 --input-range PC --fps 30 -force-cfr --preset slower --crf 0 --output-csp i444 --range PC --demuxer y4m -o x264_lossless.mkv "E:\Videó Felvételek\pc709.avs"
x264 [error]: invalid argument: deblock = orce-cfr

E:\Videó Felvételek>x264 --input-range PC --fps 30 --force-cfr --preset slower --crf 0 --output-csp i444 --range PC --colormatrix bt709 --colorprim bt709 -o x264_lossless.mkv "E:\Videó Felvételek\pc709.avs"
avs [info]: 1600x1200p 0:0 @ 3998/143 fps (cfr)
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle?
x264 [info]: profile High 4:4:4 Predictive, level 5.0, 4:4:4 8-bit
x264 [info]: frame I:7 Avg QP: 0.00 size:695602
x264 [info]: frame P:213 Avg QP: 0.00 size:395907
x264 [info]: mb I I16..4: 56.2% 23.3% 20.5%
x264 [info]: mb P I16..4: 6.9% 1.8% 1.6% P16..4: 29.5% 6.9% 13.5% 0.0% 0.2% skip:39.5%
x264 [info]: 8x8 transform intra:19.1% inter:36.7%
x264 [info]: coded y,u,v intra: 82.6% 66.4% 56.4% inter: 53.0% 52.7% 46.1%
x264 [info]: i16 v,h,dc,p: 36% 62% 2% 0%
x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 40% 29% 1% 2% 2% 1% 0% 0%
x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 34% 6% 4% 11% 7% 4% 3% 2%
x264 [info]: Weighted P-Frames: Y:23.5% UV:16.4%
x264 [info]: ref P L0: 69.7% 2.3% 13.4% 5.2% 3.7% 2.3% 1.6% 0.9% 0.9% 0.0%
x264 [info]: kb/s:97306.31

encoded 220 frames, 1.58 fps, 97306.93 kb/s

Command line 2:

E:\Videó Felvételek>ffmpeg -i "E:\Videó Felvételek\motor2.avi" -an -vcodec libx264 -preset slower -crf 0 -pix_fmt yuvj444p -x264opts "colorprim=bt709:transfer=bt709:colormatrix=bt709" yuv-ffmpeg.mkv
ffmpeg version N-60813-g44b22bb Copyright (c) 2000-2014 the FFmpeg developers

built on Feb 22 2014 03:11:45 with gcc 4.8.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-l

ibgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora -
-enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib

libavutil 52. 65.100 / 52. 65.100
libavcodec 55. 52.102 / 55. 52.102
libavformat 55. 33.100 / 55. 33.100
libavdevice 55. 10.100 / 55. 10.100
libavfilter 4. 1.103 / 4. 1.103
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100

Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, avi, from 'E:\Vide+- Felv+ętelek\motor2.avi':

Duration: 00:00:07.87, start: 0.000000, bitrate: 291034 kb/s

Stream #0:0: Video: utvideo (ULRG / 0x47524C55), rgb24, 1600x1200, 30 fps, 30 tbr, 30 tbn, 30 tbc
Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s

[swscaler @ 03ff88a0] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 040d06c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle?
[libx264 @ 040d06c0] profile High 4:4:4 Predictive, level 5.0, 4:4:4 8-bit
[libx264 @ 040d06c0] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=8 deblock=1:0:0 analyse=0x3:0x133 me=umh subme=9 psy=0 mixed_ref=1 me_range=16 chroma_me=1 trelli
s=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=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 r
c=cqp mbtree=0 qp=0
Output #0, matroska, to 'yuv-ffmpeg.mkv':

Metadata:

encoder : Lavf55.33.100
Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuvj444p, 1600x1200, q=-1--1, 1k tbn, 30 tbc

Stream mapping:

Stream #0:0 -> #0:0 (utvideo -> libx264)

Press [q] to stop, ? for help
frame= 220 fps=1.6 q=-1.0 Lsize= 88422kB time=00:00:07.86 bitrate=92086.6kbits/s
video:88420kB audio:0kB subtitle:0 data:0 global headers:0kB muxing overhead 0.002805%
[libx264 @ 040d06c0] frame I:7 Avg QP: 0.00 size:705491
[libx264 @ 040d06c0] frame P:213 Avg QP: 0.00 size:401890
[libx264 @ 040d06c0] mb I I16..4: 54.2% 24.7% 21.1%
[libx264 @ 040d06c0] mb P I16..4: 6.8% 1.9% 1.6% P16..4: 29.3% 7.0% 13.5% 0.0% 0.2% skip:39.6%
[libx264 @ 040d06c0] 8x8 transform intra:20.1% inter:39.4%
[libx264 @ 040d06c0] coded y,u,v intra: 83.9% 67.4% 58.1% inter: 52.9% 52.6% 47.0%
[libx264 @ 040d06c0] i16 v,h,dc,p: 35% 63% 2% 0%
[libx264 @ 040d06c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 24% 43% 27% 1% 2% 2% 1% 0% 0%
[libx264 @ 040d06c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 35% 6% 4% 11% 6% 4% 3% 2%
[libx264 @ 040d06c0] Weighted P-Frames: Y:23.5% UV:16.9%
[libx264 @ 040d06c0] ref P L0: 68.1% 2.6% 14.4% 5.3% 3.7% 2.4% 1.6% 0.9% 0.9% 0.0%
[libx264 @ 040d06c0] kb/s:92075.64

Command line 3:

E:\Videó Felvételek>ffmpeg -i "E:\Videó Felvételek\pc709.avs" -an -vcodec libx264 -preset slower -crf 0 -pix_fmt yuvj444p -x264opts "colorprim=bt709:transfer=bt709:colormatrix=bt709" yuv-ffmpeg-avs.mkv
ffmpeg version N-60813-g44b22bb Copyright (c) 2000-2014 the FFmpeg developers

built on Feb 22 2014 03:11:45 with gcc 4.8.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-l

ibgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora -
-enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib

libavutil 52. 65.100 / 52. 65.100
libavcodec 55. 52.102 / 55. 52.102
libavformat 55. 33.100 / 55. 33.100
libavdevice 55. 10.100 / 55. 10.100
libavfilter 4. 1.103 / 4. 1.103
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100

Input #0, avisynth, from 'E:\Vide+- Felv+ętelek\pc709.avs':

Duration: 00:00:07.87, start: 0.000000, bitrate: 0 kb/s

Stream #0:0: Video: rawvideo (444P / 0x50343434), yuv444p, 1600x1200, 27.96 fps, 27.96 tbr, 27.96 tbn, 27.96 tbc

[swscaler @ 040288a0] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 02a8c480] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle?
[libx264 @ 02a8c480] profile High 4:4:4 Predictive, level 5.0, 4:4:4 8-bit
[libx264 @ 02a8c480] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=8 deblock=1:0:0 analyse=0x3:0x133 me=umh subme=9 psy=0 mixed_ref=1 me_range=16 chroma_me=1 trelli
s=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=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 r
c=cqp mbtree=0 qp=0
Output #0, matroska, to 'yuv-ffmpeg-avs.mkv':

Metadata:

encoder : Lavf55.33.100
Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuvj444p, 1600x1200, q=-1--1, 1k tbn, 27.96 tbc

Stream mapping:

Stream #0:0 -> #0:0 (rawvideo -> libx264)

Press [q] to stop, ? for help
frame= 220 fps=1.6 q=-1.0 Lsize= 81741kB time=00:00:07.86 bitrate=85096.7kbits/s
video:81739kB audio:0kB subtitle:0 data:0 global headers:0kB muxing overhead 0.003007%
[libx264 @ 02a8c480] frame I:6 Avg QP: 0.00 size:759384
[libx264 @ 02a8c480] frame P:214 Avg QP: 0.00 size:369831
[libx264 @ 02a8c480] mb I I16..4: 49.7% 31.6% 18.7%
[libx264 @ 02a8c480] mb P I16..4: 9.9% 2.3% 1.2% P16..4: 28.4% 5.3% 10.7% 0.0% 0.2% skip:41.9%
[libx264 @ 02a8c480] 8x8 transform intra:19.8% inter:38.6%
[libx264 @ 02a8c480] coded y,u,v intra: 35.7% 84.0% 67.9% inter: 31.8% 48.7% 43.5%
[libx264 @ 02a8c480] i16 v,h,dc,p: 76% 23% 1% 0%
[libx264 @ 02a8c480] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 11% 22% 66% 0% 1% 1% 0% 0% 0%
[libx264 @ 02a8c480] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 36% 7% 3% 10% 7% 4% 2% 2%
[libx264 @ 02a8c480] Weighted P-Frames: Y:20.6% UV:15.4%
[libx264 @ 02a8c480] ref P L0: 68.4% 7.3% 9.9% 5.0% 3.3% 2.3% 1.6% 0.8% 1.3% 0.2%
[libx264 @ 02a8c480] kb/s:85094.27

Changed 5 years ago by mzso

RGB Source screenshot

Changed 5 years ago by mzso

Screenshot of file encoded to yuv444 with x264 using avisynth with "crf 0"

Changed 5 years ago by mzso

Screenshot of file encoded to yuv444 with ffmpeg/libx264 with "crf 0"

Changed 5 years ago by mzso

Screenshot of file encoded to yuv444 with ffmpeg/libx264 using avisynth input with "crf 0"

comment:17 Changed 3 years ago by rogerdpack

can the x264.exe executable convert it right?

comment:18 Changed 3 years ago by rogerdpack

  • Cc rogerdpack@gmail.com added

comment:19 Changed 17 months ago by Djfe

This is still an issue.

ffmpeg -i .\logo-huffyuv.avi -c:v libx264 -an test.mp4

Is producing wrong colors.

The following command does the right thing, but why isn't is the default?:
ffmpeg -i .\logo-huffyuv.avi -pix_fmt yuv444p -vf scale=w=0:h=0:out_color_matrix=bt709 -x264opts colorprim=bt709:transfer=bt709:colormatrix=bt709 -c:v libx264 -an test.mp4

-pix_fmt yuv444p can be considered optional since FFmpeg guesses that by itself.
-x264opts colorprim=bt709:transfer=bt709:colormatrix=bt709 doesn't make the image look any different, but writes the correct colorspace information into the file, so that FFmpeg, Media Info and others can show it.

Without the x264 opts bt709 wouldn't be written in the following ffprobe output:

Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p(tv, bt709), 1920x1080, 12487 kb/s, 60 fps, 60 tbr, 500k tbn, 120 tbc (default)

To me this looks like ffmpeg is converting to bt601 by default, but all players interpret it like bt709 or something like that. (But I could be wrong, in any way, the colors are converted wrong atm.)

I extracted 6 frames from the original file (log-huffyuv.avi).
You can find it here:
https://drive.google.com/open?id=0B_dHhH1qeJ6DMU5ETG5rdFpDWGM
(I wanted to upload to upload.ffmpeg.org, but the ftp server seems to be down)

Output of the correct command on an avi file:

PS D:\some path> ffmpeg -i .\logo-huffyuv.avi -pix_fmt yuv444p -vf scale=w=0:h=0:out_color_matrix=bt709 -x264o
pts colorprim=bt709:transfer=bt709:colormatrix=bt709 -c:v libx264 -crf 0 -tune animation -preset placebo -profile:v high
444 -an logo-H264-test.mp4
ffmpeg version N-84814-gad7aff0 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 6.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-zlib
  libavutil      55. 52.100 / 55. 52.100
  libavcodec     57. 86.103 / 57. 86.103
  libavformat    57. 68.100 / 57. 68.100
  libavdevice    57.  3.101 / 57.  3.101
  libavfilter     6. 78.101 /  6. 78.101
  libswscale      4.  3.101 /  4.  3.101
  libswresample   2.  4.100 /  2.  4.100
  libpostproc    54.  2.100 / 54.  2.100
Input #0, avi, from '.\logo-huffyuv.avi':
  Metadata:
    encoder         : Lavf57.71.100
  Duration: 00:00:04.48, start: 0.000000, bitrate: 776213 kb/s
    Stream #0:0: Video: huffyuv (HFYU / 0x55594648), bgr0, 1920x1080, 779087 kb/s, 60 fps, 60 tbr, 60 tbn, 60 tbc
File 'logo-H264-test.mp4' already exists. Overwrite ? [y/N] y
Stream mapping:
  Stream #0:0 -> #0:0 (huffyuv (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0000000002037060] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0000000002037060] profile High 4:4:4 Predictive, level 5.1, 4:4:4 8-bit
[libx264 @ 0000000002037060] 264 - core 148 r2762 90a61ec - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=16 deblock=1:1:1 analyse=0x1:0x131 me=esa subme=9 psy=0 mixed_ref=1 me_range=24 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=12 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc=cqp mbtree=0 qp=0
Output #0, mp4, to 'logo-H264-test.mp4':
  Metadata:
    encoder         : Lavf57.68.100
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv444p, 1920x1080, q=-1--1, 60 fps, 500k tbn, 60 tbc
    Metadata:
      encoder         : Lavc57.86.103 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
frame=  269 fps= 26 q=-1.0 Lsize=    5815kB time=00:00:04.46 bitrate=10665.2kbits/s speed=0.437x
video:5813kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.033330%
[libx264 @ 0000000002037060] frame I:3     Avg QP: 0.00  size: 11825
[libx264 @ 0000000002037060] frame P:266   Avg QP: 0.00  size: 22243
[libx264 @ 0000000002037060] mb I  I16..4: 98.7%  0.0%  1.3%
[libx264 @ 0000000002037060] mb P  I16..4:  1.6%  0.0%  0.3%  P16..4:  4.4%  0.5%  0.5%  0.1%  0.1%    skip:92.5%
[libx264 @ 0000000002037060] 8x8 transform intra:0.0% inter:11.9%
[libx264 @ 0000000002037060] coded y,u,v intra: 22.1% 20.9% 20.3% inter: 2.9% 2.7% 2.7%
[libx264 @ 0000000002037060] i16 v,h,dc,p: 84% 14%  1%  1%
[libx264 @ 0000000002037060] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 18% 20%  7% 11%  7%  9%  5%  1%
[libx264 @ 0000000002037060] Weighted P-Frames: Y:13.2% UV:12.0%
[libx264 @ 0000000002037060] ref P L0: 60.1%  0.5%  7.9%  5.0%  4.2%  4.1%  3.6%  2.4%  2.0%  1.6%  1.8%  1.9%  1.6%  1.3%  1.2%  0.6%
[libx264 @ 0000000002037060] kb/s:10621.08

comment:20 Changed 17 months ago by Djfe

someone just informed me, that the file I uploaded doesn't contain any information about which color matrix it conforms to.
FFmpeg obviously guessed BT.709 since it's a full hd video.
But in fact it was BT.601

The only issue I can see here, is that FFmpeg has to guess the color matrix, but doesn't warn the user about that.

But the original issue might be a different one, so don't close this, yet ;)

Note: See TracTickets for help on using tickets.