Hello guest, if you like this forum, why don't you register? https://fanrestore.com/member.php?action=register (December 14, 2021) x


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
xvYCC for x264
#11
(2021-03-25, 06:17 AM)deleted user Wrote: Ok for anyone who's wondering how to encode xvYCC, I might have found out. First, you need to start out with some color space that has a big gamut to begin with. Let's say Rec 2020. It doesn't have to be HDR, you can just do a normal Rec2020 Gamma 2.4. This ensures that your source has all the colors you want to preserve. So work in and/or render out in Rec2020. If you are working in After Effects for example, in 32 bit floating point mode, then your working color space can be Rec709, you just have to set Rec2020 for the output, since the gamut gets preserved thanks to the ability of the 32 bit floating point data to hold negative values. Otherwise you likely have to work immediately in Rec2020.

Load your source in AVISynth and perform the following command:
Code:
z_ConvertFormat(colorspace_op="2020:709:2020:l=>709:xvycc:709:l",pixel_type="YUV444P16")
Note that you have to adapt the part before "=>" to your own input. The above example would be for a YUV Rec2020 Gamma 2.4 file with Limited range. The reason I put "709" there is because that's the transfer characteristic for Gamma 2.4. It doesn't look elegant but it works.

Now let's say you're encoding straight from a HDR source, then you'd do:
Code:
z_ConvertFormat(colorspace_op="2020ncl:st2084:2020:l=>709:xvycc:709:l",pixel_type="YUV444P16")
This probably isn't a great idea though because converting straight from HDR without any tonemapping will lead to clipped highlights.

An alternate approach that would allow for tonemapping:
Code:
z_ConvertFormat(colorspace_op="2020ncl:st2084:2020:l=>rgb:linear:2020:f",pixel_type="RGBPS") // First convert to linear floating point Rec2020
// Do tonemapping here with whatever method you like. It needs to accept the "RGBPS" color space, which is a 32 bit floating point planar RGB color space. I believe the DGHable functions and such accept that.
z_ConvertFormat(colorspace_op="rgb:linear:2020:f=>709:xvycc:709:l",pixel_type="YUV444P16") // Now finally to xvYCC, while preserving as wide of a gamut as possible

For these commands to work, you need this plugin: http://avisynth.nl/index.php/Avsresize

Now finally, I did a test loading such a script in VirtualDub and encoding to x264 with the internal x264 encoder. I loaded that back into AVISynth and I'm happy to say that the data was preserved. I tested it with some very saturated scenes.

So now the data gets preserved, but the player still won't know that it's dealing with xvYCC data. I can't say with 100% certainty that the following will work, but it does produce the proper metadata in the MediaInfo. Simply use the following x264 parameters instead of the usual:
Code:
--transfer="iec61966-2-4" --colormatrix="bt709" --colorprim="bt709"

To my knowledge, colorprim and colormatrix stay the same, but the transfer characteristic is different. When you encode it like this, the resulting file will show "xvYCC" as the Transfer characteristic. I think that should do the trick, but it would take someone with a compatible TV to try. I can definitely see a difference in MPC-HC, however I haven't attempted to verify that it looks "correct".

If anyone wants a sample encode with 2 frames (one in xvycc and one in rec709), PM me. It's just 100KB.

Note: This will also work with DCI-P3 as the source for example. The only requirement really is that z_ConvertFormat supports the source color space you are feeding into it and you give it the correct info about it.

With that said .... now you have no more excuses for not having wide gamut colors in your projects. Wink These files are compatible with normal Rec709 as far as I know.

It's amazing !
Would this work to encode to x264 compat blu-ray?
Reply
Thanks given by:


Possibly Related Threads…
Thread Author Replies Views Last Post
Thumbs Up x264 BD compliant "perfect" settings spoRv 150 214,392 2023-09-16, 10:08 PM
Last Post: DoomBot
  x264 - filesize output calculator for 2-pass and CRF ? loa 7 5,464 2020-08-05, 10:30 PM
Last Post: spoRv
  [Idea] x264 BD compliant "perfect" settings - faster version spoRv 26 21,400 2020-05-11, 08:36 PM
Last Post: Stamper
  x264 encoding from Adobe Premiere DoomBot 26 20,683 2019-03-25, 08:26 PM
Last Post: jaminmc
  Tools and settings for compressing x264? NeonBible 1 2,743 2019-01-11, 12:01 PM
Last Post: MrBrown
  [Help] DNxHR to x264? Valeyard 2 3,406 2018-12-26, 10:16 AM
Last Post: deleted user
  x264: 32bit or 64bit? spoRv 15 17,173 2018-03-03, 08:57 PM
Last Post: deleted user

Forum Jump:


Users browsing this thread: 1 Guest(s)