Colour science/V1/Component video

Component video

YCbCr and Y′CbCr

From nonlinear R′G′B′ to Y′CbCr: luma versus luminance, BT.601/709/2020 matrices, Cb/Cr normalisation, narrow/full range, subsampling, chroma siting and common matrix errors.

Y′CbCrBT.709 matrixRangeSiting
In plain language

Y′CbCr is not a colour space like Rec.709. It is a way to represent an already-defined nonlinear RGB signal as a luma-like Y′ plus two colour-difference components, which is useful for video coding and chroma subsampling.

11 sections4 primary references

Quick reference

Definitions and numbers worth keeping in view

BT.709 Y′
0.2126 R′ + 0.7152 G′ + 0.0722 B′
BT.601 Y′
0.299 R′ + 0.587 G′ + 0.114 B′
BT.2020 NCL Y′
0.2627 R′ + 0.6780 G′ + 0.0593 B′
Y′ ≠ Y
Luma-like ≠ CIE luminance
10-bit chroma neutral
Cb=Cr=512

For narrow-range digital representation.

Y′CbCr

A luma-like component plus two colour-difference components

R′G′B′
nonlinearly encoded RGB
Y′
KrR′ + KgG′ + KbB′
Cb / Cr
blue/red difference
STDY′ WEIGHTSUSE
BT.6010.299 / 0.587 / 0.114SD
BT.7090.2126 / 0.7152 / 0.0722HD
BT.20200.2627 / 0.6780 / 0.0593UHD / WCG
Y′ is luma, not physical luminance Y
Matrix depends on colourimetry
Subsampling applies to Cb/Cr, not Y′
01

Why Y′ has a prime

The matrix is normally applied to nonlinear R′G′B′ values after OETF/transfer encoding, so the result is written Y′. CIE luminance Y is derived from linear tristimulus/light relationships. These quantities are related but not interchangeable. Saying 'the Y channel is luminance' is technically too crude.

02

The general idea of Y′CbCr

First Y′ is formed as a weighted sum of R′G′B′. Cb stores a blue-difference component and Cr a red-difference component. In normalized form, it is useful to think of Cb=(B′−Y′)/(2−2Kb) and Cr=(R′−Y′)/(2−2Kr), where Kr/Kb depend on the standard. Neutral grey has Cb=Cr=0 before integer offsets are applied.

03

BT.709 matrix

For HDTV BT.709: Y′=0.2126R′+0.7152G′+0.0722B′. Correspondingly Cb≈(B′−Y′)/1.8556 and Cr≈(R′−Y′)/1.5748. These coefficients are tied to BT.709 primaries/colorimetry and should not be applied automatically to an SD BT.601 signal.

04

BT.601 matrix

Legacy SD BT.601 uses Kr=0.299, Kg=0.587 and Kb=0.114. Old SD video interpreted with a BT.709 matrix therefore acquires small but systematic hue/luma changes. This is one classic source of 'why did the old clip change after transcode?'

05

BT.2020 non-constant-luminance matrix

For BT.2020 NCL: Y′=0.2627R′+0.6780G′+0.0593B′, Cb=(B′−Y′)/1.8814 and Cr=(R′−Y′)/1.4746. The standard also defines a BT.2020 constant-luminance variant; it is a different representation with separate matrix_coefficients signalling and should not be confused with normal BT.2020 NCL.

06

How normalized components become integers

In narrow-range video, Y′ normally occupies 16–235 in 8-bit or 64–940 in 10-bit. Chroma has a neutral offset: 128 in 8-bit / 512 in 10-bit, with nominal extremes of 16–240 / 64–960. This is why neutral chroma is not encoded as zero and why range conversion uses different nominal spans for Y′ and Cb/Cr.

07

Why chroma is convenient to subsample

Y′ carries much of the spatial detail while Cb/Cr carry colour-difference detail. Human vision is generally less sensitive to fine spatial chroma, so 4:2:2/4:2:0 reduce bandwidth with a smaller perceptual cost than an equivalent loss of luma resolution. The advantage becomes much less forgiving on graphics and keying.

08

Chroma sample location is a hidden parameter

In 4:2:0, chroma samples can be co-sited or centred relative to the luma grid depending on system/codec. H.26x/VUI metadata can signal location types. If an upsampler assumes a different phase, coloured edges shift and false colour/softness can appear on vertical or horizontal transitions.

09

YCbCr ≠ YUV ≠ YPbPr

YUV historically refers to analogue composite/component concepts, YPbPr to analogue component representation, and YCbCr to digital component coding. Everyday language often mixes them and pixel-format names use 'yuv' as an umbrella label, but technical descriptions should name the actual representation.

10

What a wrong matrix looks like

Wrong BT.601/709/2020 decoding rarely looks like a simple uniform tint. Channel relationships, saturation and luma contribution change, so skin and saturated colours shift differently. If the problem depends on object chroma while black/white range is normal, matrix mismatch is a more plausible hypothesis than a levels error.

11

What to check in Resolve

Resolve normally decodes YCbCr through the codec/media pipeline into internal RGB processing. The user therefore depends on correct media tags, Data Levels and input colour space/transfer; a YCbCr matrix mismatch can happen before the nodes. With a suspicious transcode, compare source and decode and inspect stream matrix_coefficients instead of trying to 'restore the colour' manually with wheels.

What this changes in post

To stay oriented, first name the source R′G′B′ colorimetry/transfer, then matrix_coefficients, then range. Only after those three questions do Y′CbCr numbers become unambiguous.

Common mistakes
Calling Y′ physical luminance Y.
Treating YCbCr as an independent gamut.
Decoding an SD BT.601 matrix as BT.709.
Confusing BT.2020 NCL with constant-luminance representation.
Ignoring chroma neutral offset/range.
Ignoring chroma siting during resampling.