Crisp › Learn › Colour space

BT.601 vs BT.709: read with the wrong one, greens and cyans shift most

Crisp · built in Grand Rapids · published 2026-08-11 · last updated 2026-09-23
Quick answer

Your colours look wrong because the video was decoded with a different colour standard from the one it was made with. SD video uses BT.601, HD uses BT.709, and a file that doesn't say which gets a guess. We measured the mix-up. On ordinary footage the average shift is small, near the edge of what you can see. On strong colours it isn't: pure green loses 15% of its level, and green and cyan move about six times the just-visible amount. Confusing Rec.709 with Rec.2020 is worse still.

What a colour space actually is

A video file doesn't store colours. It stores numbers, and the number 200 in a channel means nothing on its own. A colour space is the agreement that turns those numbers back into colour. For video it has three parts, and a well-made file carries a tag for each:

Log formats such as S-Log or C-Log sit apart from these. They store a wide range in a deliberately flat curve and expect you to grade them. Footage that looks grey straight out of a camera is usually log, not broken.

The BT.601 and BT.709 mix-up, measured

Three sets of colour bars. The first is correct. In the second the green is darker and the red has turned orange. In the third the green and cyan are brighter and more neon.
Standard 75% colour bars. First: decoded with the matrix they were made with. Second: SD (BT.601) bars decoded as HD (BT.709). Third: HD bars decoded as SD.

We stored the same picture with one matrix and decoded it with the other, in both directions, using ffmpeg 8.1.2 (the version inside Crisp). We measured the result against the correct decode in ΔE76, the standard distance between two colours. About 2.3 is the smallest difference most people can see. On colour bars, SD video decoded as HD moved each colour this far:

BarShould be (RGB)Came outΔE76
Cyan0, 190, 1900, 171, 19214.9
Green0, 190, 00, 161, 014.7
Yellow191, 190, 0194, 179, 07.7
Red191, 0, 0208, 18, 06.2
Magenta191, 0, 192205, 30, 1975.3
Blue0, 0, 1910, 12, 2002.8
White / grey191, 191, 191191, 191, 1910.0

Decoded with the right matrix, every bar stayed within 0.4. Greys never move, because the two recipes agree about anything without colour. That's why this mistake is easy to miss: skies, skin and walls barely change. On a real scene, a canal with trees and water from the demo on our home page, the average shift was only 1.8 (SD read as HD) and 2.2 (HD read as SD). But reading HD as SD moved 6.3% of the frame by more than 5 (1.4% the other way). Those were the strongly coloured pixels, 2.4 times as colourful as the frame's average, and 97% of them were the yellow-greens of the trees.

How a player decides which one to use

It reads the file's tag first. If there isn't one, most players guess from the picture size: an SD-sized picture gets BT.601 and an HD-sized one BT.709. The guess is right far more often than not, which is why untagged files usually look fine.

Trouble starts when something doesn't guess. ffmpeg's own converter, which a great deal of video software is built on, uses BT.601 for an untagged file whatever its size. So an untagged HD clip, such as many screen recordings and older exports, can look right in your player and come out with shifted greens in a still or a GIF made from it. The same can happen when an SD clip is upscaled to HD but keeps its SD numbers without saying so: a player sees an HD frame and picks the HD recipe.

Rec.709 and Rec.2020 read wrong

The same canal scene three times: correct first, visibly duller second, and oversaturated third.
First: read correctly. Second: Rec.2020 numbers read as Rec.709. Third: ordinary Rec.709 numbers read as Rec.2020. Frame from the phone demo on our home page, itself derived from a CC0 clip on Wikimedia Commons.

Mixing up the primaries does far more damage than mixing up the matrix. Rec.2020 writes the same colour with smaller numbers, because its scale reaches further. Read on the narrower Rec.709 scale, everything looks dull: the frame kept 77% of its saturation, the average shift was 4.2, and 36% of pixels moved by more than 5. The reverse, ordinary video treated as Rec.2020, came out oversaturated at 152%, with an average shift of 6.5 and 60% of pixels moved by more than 5.

For the record, the correct conversion isn't perfect either. Rec.709 to Rec.2020 and back measured an average shift of 1.9, just under the 2.3 you can see.

Converting is not relabelling

Converting maps the actual pixel values from one space to another, so the colours stay the same. Relabelling only changes the tag, so every player reads the unchanged numbers with a new recipe. Every wrong reading on this page is a relabelling in effect. Relabelling is the right fix for a file that was tagged wrongly, and the wrong one for everything else.

What Crisp does

Measured on the installed app:

The practical rules

Put every clip in one colour space before you edit. Otherwise a grade that looks right on one clip is wrong on the next. Convert on purpose, never by relabelling. And check a colour problem on a second screen before chasing it in the file: a fault on only one display is calibration, not video.

Colour space questions

Why do my greens look different after converting a video?

Most often the video was decoded with the other matrix, BT.601 instead of BT.709 or the reverse. Greys don't change, but saturated greens and cyans move the most: in our test pure green lost 15% of its level. Check that the converted file carries a colour tag, and that the tool converted the pixels rather than just changing the label.

How do I know which colour space my video uses?

A media inspector such as MediaInfo, or ffprobe, lists the colour matrix, primaries and transfer. If they say "unknown", the file has no tag and every player will guess, usually from the picture height.

Why does my footage look washed out before I have touched it?

Two likely causes. It is log footage, which is meant to look flat and expects grading, or it is HDR being shown by something that ignores its tags. Both look similar and have completely different fixes.

What is the difference between converting and relabelling?

Converting maps the actual pixel values from one space to another so the colours stay the same. Relabelling changes only the tag, so players read unchanged numbers with a different recipe and the colours shift. Relabelling is the right fix for a mis-tagged file and wrong for everything else.

Should I edit in Rec.2020?

Only if your whole chain supports it end to end and the footage has colour worth keeping. Otherwise you carry the complexity for a range your delivery will discard anyway.

Related

Download Crisp for Mac Free to try, one-time $129 to remove the watermark. Runs entirely on your Mac.