When I go through the details of High dynamic range feature, I have come across ICtCp color format (Rec.2020). Is this similar to YCbCr? What is the exact difference between YCbCr and ICtCp? Can I pass ICtCp buffer to video encoder (H264/avc or H265/hevc) directly?
Asked
Active
Viewed 328 times
0
-
it's part of H.265, but not H.264. – O. Jones Oct 31 '19 at 08:48
-
Thanks a lot Jones. Looks like ICtCp can be given to encoder as input. No need of color conversion. – stackuser Nov 04 '19 at 06:36
-
It does not matter that it is not part of H.264. It will still work. – Валерий Заподовников May 09 '21 at 10:44
-
As for YCbCr vs ICtCp: ICtCp is perceptually more uniform (basically giving you the same accuracy for a smaller bit depth) and also manages to properly separate luminosity from chromacity (unlike YCbCr) which greatly reduces artefacts due to chroma subsampling. – sellibitze Aug 30 '21 at 13:25
2 Answers
1
YCbCr and ICtCP are all luma/chroma color space. The difference between them is the chroma channels. HDR has been included in H.265. x265 only supported raw YUV or Y4M but you can have a try.

Wang
- 145
- 5
-
Thanks a lot Wang, I understand that there is a difference in YUV and ICtCp w.r.t. chroma data. H.265 can accept ICtCp directly. What about H264? do we need to convert from ICtCp to YUV before feeding to H264? – stackuser Nov 01 '19 at 18:25
0
You can feed it, but only with zscale, not with old but more precise for old YCbCr swscale.
See commands here: https://github.com/sekrit-twc/zimg/issues/138
ffmpeg -v debug -f rawvideo -pix_fmt rgb48le -s:v 192x108 -i SCD_192x108.rgb48.rgb -vf format=gbrp16le,zscale=rangein=full:range=full:npl=10000:matrixin=input:transferin=smpte2084:primariesin=2020:matrix=ictcp:transfer=smpte2084:primaries=2020,format=yuv444p16le -f rawvideo FFMPEG_ICTCP_SCD_192x108.rgb48.plr.ffmpeg.yuv

Валерий Заподовников
- 351
- 2
- 13