Chroma Subsampling Lab
Compare how video codecs preserve luma detail while reducing chroma resolution.
why codecs throw away color first 🖖
Human vision resolves brightness detail more sharply than color detail, so codecs keep full luma (Y) resolution and share chroma (Cb/Cr) samples across neighboring pixels. 4:4:4 stores full color detail, 4:2:2 halves horizontal chroma resolution, and 4:2:0 halves chroma both horizontally and vertically. The bandwidth saving is real: 4:2:0 uses about half the raw sample data of 4:4:4, but sharp colored text and alternating color patterns reveal the loss first.
what the three numbers mean 🖖
The ratio is a recipe for a block that is 4 pixels wide and 2 rows tall. The first number (4) is the block width; the second counts the color samples in the top row; the third says how many change in the bottom row. So 4:2:2 takes 2 color samples per row, while 4:2:0 takes 2 in the top row and reuses them below (0 new), sharing one color across a 2×2 square. Luma is always sampled at every pixel.
your grandparents' TV already did this 🖖
Chroma subsampling is not a digital invention. When NTSC color television launched in 1953, engineers gave the brightness signal about 4.2 MHz of bandwidth but squeezed the two color channels into roughly 1.3 MHz and 0.5 MHz — the narrow "Q" channel exploited the eye's especially poor resolution for blue-violet color detail. Analog color TV was quietly throwing away chroma resolution decades before JPEG or H.264 formalized the idea.
Example problems
- Color bars - Color bars
- Hue gradient - Smooth hue gradient: 4:2:0 and 4:2:2 look nearly identical — natural scenes hide chroma artifacts well
- Colored text - Colored text
- Checker stress - Checker stress