[FFmpeg-user] The internal ffmpeg rgb=>yuv pipeline and conversion matrices
Peter Rabbitson
rabbit+list at rabbit.us
Mon May 9 15:01:16 CEST 2016
On 05/09/2016 01:33 PM, Thomas Worth wrote:
>
> Here's your cheat sheet if you want perfect decoding of YCbCr to RGB:
>
> 1. Encode RGB to YCbCr using the Poynton-approved RGB->709 matrix
> coefficients (don't mess with 601, trust me, unless you think apples should
> look like oranges)
> 2. Subsample the chroma channels to either 4:2:2 or 4:2:0
> 3. Scale (don't clip) luminance to 16-235
> 4. Scale (don't clip) chroma to 16-240
Thank you for this "to the point" list.
From other responses in this thread I gather the following "practical
steps" are in order:
1. Given that ffmpeg seems to interpret image2pipe fed RGB via 601, I
need to add the following filter as early as possible in my pipelines:
scale=in_color_matrix=bt601:out_color_matrix=bt709
2. I will skip this entirely, since subsampling of the source material
(text, with many font-strokes being 1-pixel wide) can only result in
guaranteed loss of color/legibility for all devices (even these that do
understand 444p). My thinking is that if a playback mode can not
directly handle 444p it will "downscale" correctly to 422p/420p.
3. It seems ffmpeg does not offer a way to do this? At least nothing in
`man ffmpeg-filter` hints to addressing this...
4. This seems to be handled by ffmpeg for me automatically, but just to
be sure, I will amend the "as early as possible" step from 1) as follows:
scale=in_color_matrix=bt601:out_color_matrix=bt709:in_range=full:out_range=tv
Please let me know if I grossly misunderstood something
Cheers
More information about the ffmpeg-user
mailing list