Содержание статьи +
- TL;DR
- Зачем это знать
- Как цвет становится числом
- RGB – родной язык камер и экранов
- YCbCr – формат, который реально использует каждый видеокодек
- Почему трёх чисел недостаточно – стандарты внутри семейства
- BT.709 – цветовое пространство HD-видео
- DCI-P3 – цветовое пространство цифрового кино
- BT.2020 – цветовое пространство 4K и HDR
- Сравнение: BT.709, DCI-P3, BT.2020
- Где всё идёт не так – и как это выявить
- Практический совет: какое цветовое пространство выбрать для какого продукта?
- Чем мы занимаемся в Фора Софт
- Ключевые выводы
- Что читать дальше
- Источники
TL;DR
Когда вы храните цвет числами в видеофайле, нужно договориться с тем, кто эти числа будет читать, какому именно цвету соответствует каждое значение. Такая договорённость называется цветовым пространством. Существует два основных семейства. Первое – RGB – хранит каждый пиксель как три числа, описывающие, сколько красного, зелёного и синего света нужно смешать. Именно так работают камеры и экраны. Второе – YCbCr – хранит каждый пиксель как одно значение яркости и два – цветовых разностей. Любой видеокодек использует этот формат, потому что он сжимается гораздо эффективнее.
Внутри каждого семейства существуют конкретные стандарты: BT.709 для HD, DCI-P3 для цифрового кино, BT.2020 для 4K и HDR. Они определяют, какие именно оттенки красного, зелёного и синего имеются в виду, и какую часть реального цветового спектра они могут охватить. Если видеофайл указывает одно цветовое пространство, а плеер интерпретирует его как другое, цвета на экране будут отображаться неправильно – выцветшими, перенасыщенными или сдвинутыми по оттенку. Эта статья объясняет все пять стандартов, зачем они нужны и как избежать ошибок при работе с ними.
Зачем это знать
Если вы разрабатываете любой продукт, работающий с видео – стриминг-сервис, образовательную платформу, видеоредактор, приложение для телемедицины – цветовые пространства рано или поздно станут проблемой. Симптомы легко распознаются, если вы их уже видели: бледно-голубоватые оттенки кожи, красный логотип бренда, не совпадающий с печатной версией, 4K-фильм, который на одном устройстве выглядит тускло-серым, а на другом – перенасыщенным. Это не баги кодека. Это несоответствия цветовых пространств: где-то в вашем пайплайне две стадии не согласованы в том, в каком цветовом пространстве интерпретировать числа в файле. Когда вы поймёте, как должна работать система, каждое исправление станет очевидным – а большую часть можно применить одним флагом командной строки. К концу статьи вы узнаете, какое цветовое пространство использовать для какого типа контента, какие цветовые метаданные запрашивать у подрядчика по кодированию и как выявить несоответствие уже при первом просмотре.
Построим картину по кусочкам – никаких предварительных знаний не нужно. Начнём с вопроса: «Что вообще значит – цвет – это число?» – и пройдёмся по всем ключевым терминам и стандартам, которые активно используются сегодня.
Как цвет становится числом
Начнём с самого начала. Цвет – с физической точки зрения – это свойство света. Белый солнечный свет, проходя через призму, распадается на радугу – непрерывный спектр длин волн: от коротких (фиолетовый, около 380 нанометров) через средние (зелёный, около 555 нм) до длинных (красный, около 700 нм). Любой видимый цвет представляет собой либо одну чистую длину волны, либо смесь нескольких длин волн, одновременно попадающих в глаз.
В вашем глазе нет отдельных рецепторов для каждой длины волны света. Есть три типа цветовых клеток – колбочки, каждая из которых настроена на свой перекрывающийся диапазон: одна наиболее чувствительна к красному свету, другая – к зелёному, третья – к синему. Мозг анализирует относительную силу этих трёх сигналов и на их основе формирует восприятие каждого цвета. Так, цвет «жёлтый», который вы видите, возникает не из-за активации отдельной колбочки, а из одновременной работы красных и зелёных. А цвет «белый» – это когда все три типа колбочек активируются примерно одинаково.
Эта биологическая особенность имеет одно важное инженерное следствие: почти любой видимый цвет можно получить, смешав правильные пропорции трёх тщательно подобранных базовых цветов. Это основа работы любого экрана, любой камеры, любого принтера и любого цветового стандарта, о котором идёт речь в этой статье. Если взять три базовых цвета – назовём их красным, зелёным и синим – и иметь возможность независимо регулировать яркость каждого, можно синтезировать практически любой цвет, который человеческий глаз воспримет как точное совпадение. Эти три базовых цвета называются primaries (основные цвета).
Вот как цвет превращается в число. Камера измеряет интенсивность красного, зелёного и синего света, попадающего в каждую точку сенсора, и записывает эти три значения. Экран берёт эти три числа и загорает свои красные, зелёные и синие субпиксели с соответствующей яркостью. Глаз восстанавливает цвет на основе трёх первичных цветов.
Эта трёхчисловая система – простейшее цветовое пространство, и у неё знакомое название.
RGB – родной язык камер и экранов
RGB, сокращение от Red-Green-Blue, – цветовое пространство, в котором каждый пиксель хранится как три числа, по одному для каждого из трёх основных цветов. Ярко-красный цвет записывается как (255, 0, 0): полный красный, без зелёного и синего. Ярко-синий – (0, 0, 255). Серый цвет – например, (128, 128, 128) – получается при равных долях всех трёх основных цветов и даёт нейтральный оттенок. Ярко-жёлтый – (255, 255, 0) – сочетает полный красный и зелёный, без синего.
Диапазон 0–255 в этих примерах обусловлен тем, что каждая цветовая компонента хранится в одном байте данных – восемь бинарных цифр, способных вместить 256 различных значений. С тремя компонентами на пиксель получается 256 × 256 × 256 ≈ 16,7 миллиона различимых цветов. Мы уже видели это в «Что такое цифровое видео».
RGB – родной формат для захвата и отображения изображений. Сенсор камеры напрямую считывает данные в RGB – так устроена электроника. Пиксели монитора физически представляют собой крошечные красные, зелёные и синие элементы, поэтому они также работают с RGB напрямую. Формат, который вы видите в палитре Photoshop, в CSS-файле или в Pantone-референсе графического дизайнера, – почти всегда RGB.
Но вот тут для видео начинается интересное. Почти ни один видеофайл в интернете не хранит пиксели в формате RGB. Видео использует другое цветовое пространство – и для этого есть веская причина.
YCbCr – формат, который реально использует каждый видеокодек
Если заглянуть внутрь почти любого видеофайла, предназначенного для стриминга, вещания или воспроизведения – будь то Netflix, YouTube, запись с телефона, сессия Zoom или диск Blu-ray – пиксели хранятся не в формате RGB, а в другой трёхкомпонентной системе: YCbCr.
Вот как работает YCbCr. Возьмите три RGB-значения одного пикселя. Примените к ним простую математическую формулу, комбинирующую их в разных пропорциях. На выходе получаются три новых числа:
- Y – это luma, единственное число, отражающее яркость пикселя, полученную путём смешивания всех трёх RGB-компонент в пропорциях, подобранных с учётом особенностей человеческого зрения. Y примерно соответствует: 30% красного + 59% зелёного + 11% синего (точные значения зависят от стандарта).
- Cb – это blue-difference chroma – число, описывающее, насколько пиксель «синее зеленоватого серого».
- Cr – это red-difference chroma – число, описывающее, насколько пиксель «краснее зеленоватого серого».
Зачем вообще нужна эта конвертация? На первый взгляд – бессмысленно: по-прежнему три числа, только другие. Ответ – главный факт всей статьи: человеческий глаз гораздо более чувствителен к изменениям яркости, чем к изменениям цвета. 1
Вы сразу заметите, если яркая деталь стала чуть размытой. Но вы не заметите, если цветовая деталь стала чуть размытой – особенно в движущемся изображении. Попробуйте прямо сейчас на своём телефоне: наведите камеру на какой-нибудь объект и слегка расфокусируйте только цвет. Разницу будет трудно различить.
Эта асимметрия восприятия глаза создаёт огромную возможность для сжатия. Если яркость (Y) и цвет (Cb, Cr) закодировать отдельно, можно выделить много битов на Y – ведь глаз к ней чувствителен, – а на Cb и Cr использовать гораздо меньше, поскольку к цвету он менее чувствителен. Технический термин для такого сокращения – chroma subsampling, а подробности его работы мы разбираем в статье «Сэмплирование и теорема Найквиста». Коротко: когда цвет кодируется с половинным разрешением по сравнению с яркостью – в формате 4:2:0 – кодеки уменьшают объём данных на пиксель примерно вдвое ещё до применения других методов сжатия, и при этом изображение остаётся отличным для человеческого глаза.
Один этот приём – причина того, что каждый коммерчески используемый видеокодек – H.264, H.265 (HEVC), AV1, VVC – работает с YCbCr, а не с RGB. Конвертация происходит автоматически при кодировании и обратно – при декодировании для воспроизведения. Зритель никогда не видит YCbCr: этот уровень – рабочий формат кодека.
Заметка о третьем термине, который встретится: YUV. YUV – аналоговый предшественник YCbCr, разработанный для телевещания 1950-х годов. Это та же идея разделения яркости и цветности, но адаптированная под аналоговое телевидение. Современные цифровые файлы используют YCbCr, однако в разговорной речи, документации инструментов и некоторых старых кодеках названия YUV и YCbCr часто употребляются как взаимозаменяемые. Когда говорят «YUV 4:2:0», почти всегда имеют в виду «YCbCr 4:2:0». Их можно считать синонимами.
Почему трёх чисел недостаточно – стандарты внутри семейства
Пока мы говорили о семействах цветовых пространств – RGB и YCbCr. Но внутри каждого семейства нужна более детальная договорённость. Две разные камеры могут обе выдавать RGB-файлы, но если они по-разному понимают, что значит «красный», то значение пикселя (255, 0, 0) будет выглядеть на каждой по-своему.
Чтобы понять почему, на минуту подумаем об экранах. Разные технологии действительно воспроизводят разные цвета, когда их красные, зелёные и синие субпиксели работают на полную мощность. Красный на старом телевизоре – это слегка иной оттенок, чем красный на современном OLED-телефоне. Красный киношного проектора – ещё другой. Все они называются «красным», но соответствуют разным физическим длинам волн. Поэтому, когда видеофайл указывает (255, 0, 0) – «сделай этот пиксель полностью красным» – какой именно красный имеется в виду?
Ответ должен быть согласован заранее, иначе картинка будет выглядеть по-разному на разных устройствах. Такая договорённость называется стандартом цветового пространства. Он определяет три вещи:
- Точные первичные цвета (primaries). Какие именно красный, зелёный и синий используются? Это определяется точными координатами на научной цветовой диаграмме (о ней – чуть позже).
- Белая точка (white point). Какой цвет получается, когда все три первичных цвета установлены на максимум? Разные источники света дают разные оттенки «белого». Холодный белый с синим оттенком от люминесцентной офисной лампы – не то же самое, что тёплый белый от лампы накаливания. Большинство современных цветовых пространств стандартизированы на D65 – белом, соответствующем среднему дневному свету при 6500 Кельвинов, то есть цветовой температуре слегка облачного полуденного неба. 2
- Transfer function (кривая гаммы). Как числовое значение (например, 128) преобразуется в реальную яркость света? Ответ: не линейно. Зависимость изогнута, чтобы соответствовать восприятию яркости человеческим глазом. Это отдельная тема, которую мы подробно разбираем в статье «Transfer functions: gamma, PQ, HLG». Пока просто помните: это тоже часть стандарта.
Без этих трёх спецификаций значение «(255, 0, 0)» не будет однозначным – видеофайл стал бы неоднозначным.
Цветовая диаграмма, которую вы увидите повсюду
Прежде чем перейти к реальным стандартам, нам понадобится один быстрый научный инструмент. В 1931 году Международная комиссия по освещению (CIE) провела серию экспериментов с десятками наблюдателей и создала двумерную карту всех цветов, различимых человеческим глазом – диаграмму цветности CIE 1931. 2
Диаграмма напоминает перевёрнутую подкову. Внешняя кривая граница изображает чистые однотонные цвета – радугу: фиолетовый в нижнем левом углу, через зелёный в верхней части дуги до красного в нижнем правом. Плоское основание подковы, называемое «линией пурпурных», соответствует не-спектральным пурпурным цветам, получаемым смешением красного и фиолетового. Внутри подковы находятся все возможные смешанные цвета, которые способен различить глаз – белый цвет расположен примерно в центре.
Эта диаграмма – универсальный референс. Каждый стандарт цветового пространства задаётся треугольником, нарисованным внутри подковы, с тремя углами, обозначающими точные позиции его красного, зелёного и синего primaries. Площадь внутри треугольника – это цвета, которые данный стандарт может воспроизвести, то есть его gamut. Всё, что находится за пределами треугольника, – это реальные цвета, которые глаз способен увидеть, но которые данный стандарт воспроизвести не может.
Теперь о стандартах.
BT.709 – цветовое пространство HD-видео
BT.709, также известное как Rec. 709, – доминирующее цветовое пространство для HD-видео. Оно было опубликовано ITU (International Telecommunication Union – международный орган стандартизации в области телекоммуникаций) в 1990 году, в тот момент, когда разрабатывался HDTV. 3 Почти любое видео, снятое, отредактированное и транслируемое в разрешении 1080p Full HD или 720p HD, использует BT.709, если для этого нет особых причин.
Primaries BT.709 намеренно консервативны. Треугольник цветового охвата относительно мал – внутрь него попадает лишь около 36% всех цветов, различимых глазом. Звучит ограниченно, но в 1990 году это был максимум, который реально могли воспроизвести массовые CRT- и ранние LCD-экраны. Не было смысла стандартизировать цвета, которые ни один потребительский экран не мог отобразить.
Если вы когда-либо работали с sRGB – стандартным цветовым пространством для веб-графики, JPEG- и PNG-изображений – вы уже использовали гамму BT.709. Оба стандарта задают по сути одинаковый треугольник на диаграмме CIE. 4 sRGB применяется для статичных изображений, BT.709 – для видео, но цветовой охват у них одинаков. Поэтому ваши фотографии и видео с телефона выглядят согласованно по цвету без какой-либо конвертации.
Для любого HD-видеопродукта в 2026 году BT.709 – это стандартный и безопасный выбор. Все устройства, браузеры и операционные системы, используемые в коммерческих целях, поддерживают BT.709. Используйте его, если у вас нет веской причины переходить на более широкий цветовой охват.
DCI-P3 – цветовое пространство цифрового кино
DCI-P3 – цветовое пространство, определённое Digital Cinema Initiatives (DCI), консорциумом, созданным крупными голливудскими студиями в 2002 году для стандартизации цифровой кинопроекции. «P3» означает «Projector 3». DCI-P3 был утверждён в 2010 году и сегодня используется во всех коммерческих киноаппаратах мира. 5
Треугольник DCI-P3 заметно шире, чем у BT.709 – около 54% цветов, различимых глазом, попадают внутрь него, с более насыщенными красными и зелёными оттенками. 6 Если вы смотрели недавний голливудский фильм в кинотеатре и заметили, насколько богаче выглядят цвета по сравнению с обычным телевизором дома, – вы видели разницу между DCI-P3 и BT.709. Эта разница реальна, а не плод воображения.
В последние годы цветовое пространство DCI-P3 вышло за пределы киноиндустрии и стало использоваться в потребительских устройствах. Почти все современные устройства Apple – iPhone с 2015 года, последние модели MacBook, Pro Display XDR и Apple TV 4K – применяют слегка модифицированную версию DCI-P3 под названием Display P3 в качестве нативного цветового пространства. То же самое делают многие премиальные Android-смартфоны, современные телевизоры Samsung и Sony, а также некоторые мониторы для ПК.
Это создаёт реальную проблему для команд по разработке продуктов. Если вы кодируете видео в простом BT.709 и воспроизводите его на устройстве с поддержкой Display P3, аппаратура зрителя может отображать более насыщенные цвета, чем те, что содержатся в файле – картинка выглядит приемлемой, но плоской. Если же кодировать в P3 и воспроизводить на BT.709-устройстве, цвета будут отображаться неправильно, если плеер явно не выполнит конвертацию. Современные операционные системы обрабатывают это прозрачно, если ваш файл правильно тегирован. О тегировании – в конце статьи.
BT.2020 – цветовое пространство 4K и HDR
BT.2020, также известное как Rec. 2020, – цветовое пространство для видео в формате Ultra High Definition (4K и 8K) и для HDR-контента (High Dynamic Range). Оно было опубликовано ITU в 2012 году одновременно с первыми стандартами 4K. 7
Треугольник BT.2020 огромен – он охватывает около 76% цветов, различимых человеческим глазом. 6 Он простирается в глубокие сине-зелёные оттенки (бирюза, недоступная ни одной системе BT.709), яркие чистые красные и максимально насыщенные зелёные. Переход от BT.709 к BT.2020 примерно такого же масштаба, как и переход от старого SD к BT.709: серьёзное расширение цветового охвата.
Есть оговорка: почти ни один потребительский дисплей в 2026 году не способен реально воспроизвести полный цветовой охват BT.2020. Лучшие OLED и Mini-LED экраны покрывают 70–80% этого диапазона; более дешёвые – значительно меньше. Поэтому BT.2020 в основном является аспирационным стандартом: файлы кодируются в BT.2020, дисплей делает всё, что может, а остальное аппроксимируется. Рассуждение вперёд: если Голливуд создаёт фильм в BT.2020 сегодня, он будет корректно выглядеть на лучших дисплеях 2030 и 2035 годов без необходимости повторного мастеринга. 8
Для HDR-контента (Dolby Vision, HDR10, HDR10+, HLG) цветовое пространство BT.2020 – выбор по умолчанию. Почти каждый HDR-файл, который вы когда-либо смотрели, внутренне помечен как BT.2020, даже если реальные цвета в нём ограничены меньшим треугольником DCI-P3. Подробнее об HDR – в «Полном гиде по HDR».
Сравнение: BT.709, DCI-P3, BT.2020
Чтобы всё было на одном месте:
| Стандарт | Выпущен | Покрытие gamut | Типичное использование | Устройства с нативной поддержкой |
|---|---|---|---|---|
| BT.709 (Rec. 709) | 1990 | ~36% видимого цвета | HD-видео, broadcast, стриминг SDR | Каждый когда-либо сделанный экран; дефолт везде |
| DCI-P3 / Display P3 | 2010 | ~54% видимого цвета | Цифровое кино, премиум-телефоны/ноутбуки/ТВ | Apple-устройства с 2015, премиум Android, современные OLED-ТВ |
| BT.2020 (Rec. 2020) | 2012 | ~76% видимого цвета | 4K UHD, HDR (Dolby Vision, HDR10) | Лучшие OLED / Mini-LED ТВ (70–80%); ни один не покрывает полностью |
Три треугольника аккуратно вложены друг в друга на диаграмме CIE 1931. Всё, что может воспроизвести BT.709, может воспроизвести и DCI-P3. Всё, что может DCI-P3, – и BT.2020. Эта вложенность – причина, по которой стандарты могут сосуществовать: контент с более широким гамутом можно конвертировать в более узкий без значительной потери качества, а контент с узким гамутом можно отображать без изменений на устройствах с широким.
Есть и забытый предок – BT.601 (Rec. 601) – определявший цветовое пространство для стандартного цифрового видео ещё в 1982 году. Его можно встретить в legacy-системах и старых DVD. Его цветовой охват (gamut) похож на BT.709, но использует слегка иную математику преобразования между RGB и YCbCr. Если вы получаете материал, помеченный как BT.601, ваш плеер должен это учитывать – неправильная математика приведёт к заметному искажению цветов.
Где всё идёт не так – и как это выявить
Вся система держится на одном: каждый видеофайл должен содержать метаданные, указывающие, в каком цветовом пространстве заданы его пиксельные значения. Эта информация называется colour space tag, и именно она позволяет плееру на приёмной стороне понять, означает ли цвет (255, 0, 0) красный по стандарту BT.709 или по стандарту BT.2020.
Когда тег корректен, всё работает: плеер читает его, применяет правильную конвертацию под дисплей, на котором запущен, и цвета соответствуют замыслу автора. Если же тег отсутствует, неверен или игнорируется – возникают несоответствия. 9
Три режима провала, с которыми столкнётся продакт-команда на практике:
Провал 1: тег отсутствует, плеер угадывает неправильно. Видеофайл закодирован без метаданных цветового пространства. Плеер по умолчанию выбирает BT.709 – самый безопасный вариант. Если файл на самом деле использует BT.2020 или DCI-P3, каждый насыщенный цвет на изображении будет выглядеть выцветшим: розовые вместо красных, бледные бирюзовые вместо ярко-зелёных, тусклые синие. Исправление – добавить метаданные; флаги FFmpeg: -color_primaries, -color_trc, -colorspace.
Провал 2: тег говорит одно, содержимое – другое. Файл помечен как BT.709, но пиксельные значения рассчитаны для BT.2020. Плеер доверяет тегу и применяет интерпретацию BT.709, из-за чего изображение выглядит перенасыщенным: значения широкого гамута накладываются на узкие первичные цвета, получая оттенки, выходящие далеко за их пределы. Красный становится обжигающим, зелёный – неоновым. Именно это люди имеют в виду, когда говорят: «это видео выглядит перенасыщенным» – обычно проблема не в содержании, а в неверном теге.
Провал 3: пайплайн срывает тег на какой-то стадии. Исходный файл создаётся корректно, но где-то в пайплайне кодирования (чаще всего на этапе downsampling или конвертации формата) теряются метаданные цветового пространства. Следующая стадия не знает, с каким цветовым пространством имеет дело, и переходит на значение по умолчанию. Каждый этап пайплайна, обрабатывающий видео, должен либо сохранять, либо корректно переписывать цветовые метаданные – иначе неизбежен цветовой дрейф.
Самый простой диагностический тест – запустить ffprobe (бесплатный инструмент, входящий в состав FFmpeg) на любом полученном файле и проанализировать метаданные цвета. Если эти поля пусты – проблема в тегировании на более раннем этапе. Исправлять нужно там, а не в плеере.
# Проверить colour space tags файла
ffprobe -v error -select_streams v:0 \
-show_entries stream=color_primaries,color_transfer,color_space,color_range \
-of default=noprint_wrappers=1 input.mp4Корректно проставленные теги в HD-файле дадут результат примерно такого вида:
color_primaries=bt709
color_transfer=bt709
color_space=bt709
color_range=tv4K HDR-файл должен возвращать bt2020 для цветовосприятия и цветового пространства. Если вы видите unknown или пустые поля – выше по цепочке пайплайн теряет цветовые метаданные.
Практический совет: какое цветовое пространство выбрать для какого продукта?
Правильный выбор зависит от типа контента и целевой аудитории. Вот эмпирическое правило, которое мы используем в Фора Софт при определении объёма нового проекта:
| Тип продукта | Рекомендуемое цветовое пространство | Почему |
|---|---|---|
| SD онлайн-обучение, telemedicine, surveillance | BT.709 | Универсальная поддержка устройств, минимальный pipeline footprint |
| Full HD стриминг, видеоконференции, OTT | BT.709 | То же самое – BT.709 безопасное предположение для любого HD-продукта |
| Премиум 4K-стриминг (кинематографический контент) | BT.2020 с HDR | Future-proof против улучшающихся дисплеев; нужен для Dolby Vision / HDR10 |
| Live broadcast, спорт, новости (HD) | BT.709 с метаданными | Индустриальный стандарт для HD-broadcast |
| Live broadcast (4K) | BT.2020 с HLG transfer | HLG – broadcast-дружелюбный вариант HDR |
| Веб / соцсети, short-form | BT.709 (или sRGB-эквивалент) | Устройства просмотра сильно варьируются; дефолтная безопасность |
Если не уверены – ответ почти всегда BT.709. Это универсальный стандарт по умолчанию. Переходите к DCI-P3 или BT.2020 только при наличии конкретной причины – премиум-контент, поддержка HDR или специфическая цветовая матрица устройств.
Частая ошибка: работать в RGB и «конвертировать в конце»
Распространённый workflow у клиентов: «Сделаем весь монтаж и цветокоррекцию в RGB, конвертируем в YCbCr только на финальном шаге кодирования». Звучит чисто, но это источник десятков тонких цветовых проблем. Конвертация из RGB в YCbCr – потеряющая в более узком яркостном диапазоне YCbCr: яркие блики обрезаются, глубокие тени схлопываются. Если работать в RGB и конвертировать один раз в конце, каждый обрезанный блик и схлопнутая тень – уже финальные.
Профессиональный подход – работать в YCbCr (или в высокобитном log-формате при HDR-источниках) с самого момента поступления файла в пайплайн. Инструменты вроде DaVinci Resolve, Adobe Premiere и FFmpeg нативно поддерживают YCbCr-воркфлоу. Результат получается более согласованным, а циклические конвертации сведены к минимуму.
Чем мы занимаемся в Фора Софт
Мы постоянно видим баги цветовых пространств, потому что работаем со всем пайплайном – telemedicine-системы, тянущие со старых больничных камер; OTT-платформы, транскодящие пользовательские загрузки; conferencing-приложения, композирующие несколько потоков вместе; surveillance-системы, архивирующие с дюжины брендов камер. Почти каждые недели работы включают как минимум один тикет вроде «цвета неправильные на iPhone, но корректные на Android» или «live-фид выглядит выцветшим по сравнению с записью». Исправление почти всегда – выше по течению от места, где проблему заметили: отсутствующий тег, сорванный тег, или шаг транскодинга, не сохранивший метаданные. Фреймворк из этой статьи – тот, что мы применяем каждый раз.
Ключевые выводы
- Цветовое пространство – это соглашение между создателем и потребителем видео о том, что на самом деле означает каждое значение пикселя.
- RGB хранит значения красного, зелёного и синего каналов на пиксель. YCbCr хранит яркость (Y) и две цветовые разности (Cb, Cr).
- Видеокодеки используют YCbCr, потому что человеческий глаз гораздо чувствительнее к изменениям яркости, чем к цвету – эта асимметрия позволяет сильно сжимать цветовую информацию.
- BT.709 охватывает около 36% видимого спектра цветов и является стандартом по умолчанию для HD. DCI-P3 охватывает около 54% и используется в киноиндустрии. BT.2020 охватывает около 76% и является амбициозным стандартом для 4K и HDR.
- Каждый видеофайл должен содержать тег цветового пространства в метаданных. Отсутствие или ошибка в тегах – главная причина цветовых артефактов в продакшене.
- По умолчанию используйте BT.709, если нет специальных требований к HDR или кино. Проставляйте теги цветового пространства на всех этапах обработки. Проверяйте с помощью ffprobe.
Что читать дальше
- Что такое цифровое видео: от аналогового сигнала к битам
- Сэмплирование и теорема Найквиста в контексте видео
- Полный гид по HDR: HDR10, HDR10+, Dolby Vision, HLG
Источники
- Семейство цветовых пространств YCbCr; декомпозиция luma/chroma; предпочтение кодеков. Wikipedia: YCbCr. https://en.wikipedia.org/wiki/YCbCr
- Диаграмма цветности CIE 1931; белая точка D65 при 6500 K; подкова видимого цвета. Wikipedia: CIE 1931 color space. https://en.wikipedia.org/wiki/CIE_1931_color_space
- ITU-R BT.709, параметры HDTV (1990). ITU. https://www.itu.int/rec/R-REC-BT.709
- sRGB и BT.709 покрывают по сути одинаковый треугольник на CIE. Color Gamut Comparison: sRGB vs DCI-P3 vs BT.2020, SidequestLab. https://sidequestlab-homepage.vercel.app/en/blog/color-gamut-comparison-guide
- Цветовое пространство DCI-P3, определено консорциумом DCI; финализировано 2010. Wikipedia: DCI-P3. https://en.wikipedia.org/wiki/DCI-P3
- Покрытие gamut: Rec.709 ≈ 36%, DCI-P3 ≈ 54%, Rec.2020 ≈ 76%. Understanding color gamut, BenQ. https://www.benq.com/en-us/business/resource/trends/understanding-color-gamut.html
- ITU-R BT.2020 (2012). ITU. https://www.itu.int/rec/R-REC-BT.2020
- BT.2020 как аспирационный стандарт; даже премиум-дисплеи покрывают ~70–80%. What Is BT.2020 Color Space, Arzopa. https://www.arzopa.com/blogs/guide/bt-2020-color-space
- Несоответствия цветовых пространств вызывают выцветший / перенасыщенный выход; управление метаданными – исправление. Color Pipeline Alignments between VFX and Color, The Post Process. https://www.thepostprocess.com/2024/03/15/color-pipeline-alignments-between-vfx-and-color/