Содержание статьи +
- TL;DR
- Зачем это знать
- Что такое «битовая глубина» на самом деле
- Проблема banding – что выглядит как «мало бит»
- Где полосатость проявляется сильнее всего
- Арифметика «насколько больше данных?»
- HEVC Main10, AV1 и остальной кодек-ландшафт
- Парадокс «10-бит помогает и SDR»
- Когда 10-битный формат избыточен, а 8-битный – правильный выбор
- Dithering – приём, спасающий 8-бит, когда выше не подняться
- Чем мы занимаемся в Фора Софт
- Ключевые выводы
- Что читать дальше
- Источники
TL;DR
Битовая глубина – это количество бит, которое используется для записи одного оттенка цвета в одном пикселе. Наиболее распространённое значение – 8 бит, что даёт 256 различных оттенков красного, зелёного и синего: достаточно для обычного контента, но недостаточно для плавных градиентов, различимых человеческим глазом. HDR-видео использует 10 или 12 бит – 1024 или 4096 оттенков на цветовой канал – и именно это предотвращает появление на небе видимых «полос» вместо плавного перехода. Этот артефакт называется banding, и он – главная причина, по которой битовая глубина имеет значение в продуктовых решениях. Компромисс вполне конкретен: 10-битное видео занимает примерно на 25% больше места и требует на столько же больше вычислительных ресурсов, чем 8-битное, а 12-битное – на 50% больше, в обмен на значительный рост качества в тенях, на небе и в любых сценах с тонкими цветовыми переходами.
Зачем это знать
Если вы создаёте видеопродукт – стриминг в стиле Netflix, видеоконференции, телемедицину, онлайн-обучение – рано или поздно вас спросят: «Нужны ли здесь 10 бит?» И тогда важно понимать, что на кону. Ответ зависит от трёх факторов: есть ли в вашем контенте плавные градиенты, которые должны выглядеть плавными; могут ли целевые устройства корректно отображать 10 бит; и готовы ли вы к дополнительной нагрузке на обработку. Эта статья предлагает модель для принятия решения без догадок. К концу вы поймёте, когда 10 бит действительно оправданы, когда 12 бит избыточны, а когда 8 бит – правильный выбор, несмотря на энтузиазм поклонников технических спецификаций.
Будем строить картину пошагово, не опираясь на предварительные знания. Каждый термин будем вводить только перед его использованием.
Что такое «битовая глубина» на самом деле
Начнём со слова бит само по себе. Бит – это наименьшая единица информации, которую может хранить компьютер: либо 0, либо 1, включено или выключено, да или нет. Вот и всё. Всё, что есть внутри компьютера, построено из битов.
Когда биты объединяются, они позволяют считать дальше. Один бит даёт возможность представить два значения – 0 и 1. Два бита – четыре комбинации: 00, 01, 10, 11. Три бита – восемь вариантов, от 000 до 111. Каждый дополнительный бит удваивает количество возможных значений. Формула: «2 в степени количества бит».
1 бит = 2¹ = 2 значения
2 бита = 2² = 4 значения
8 бит = 2⁸ = 256 значений
10 бит = 2¹⁰ = 1024 значения
12 бит = 2¹² = 4096 значенийОбратите внимание, как быстро растут числа. Два дополнительных бита (с 8 до 10) – это не «чуть-чуть больше», а умножение количества значений на четыре. Четыре дополнительных бита (с 8 до 12) – умножение на шестнадцать.
Теперь применим это к цвету. У пикселя в вашем видео три цветовые компоненты – одна для красного, одна для зелёного, одна для синего (мы это уже разбирали в «Что такое цифровое видео»). Битовая глубина – это количество бит, которое используется для каждой из этих трёх компонент. При 8-битной глубине красная компонента может принимать одно из 256 значений (от 0 – «нет красного» – до 255 – «полный красный»). При 10-битной – одно из 1024 значений. При 12-битной – 4096.
Сколько всего цветов может показать пиксель? Перемножаем количество вариантов для каждого канала:
- 8-бит: 256 × 256 × 256 ≈ 16,7 миллиона цветов.
- 10-бит: 1024 × 1024 × 1024 ≈ 1,07 миллиарда цветов.
- 12-бит: 4096 × 4096 × 4096 ≈ 68,7 миллиарда цветов.
Миллиард цветов звучит как маркетинговый слоган, а 68 миллиардов – как абсурд. Но ни одно из этих чисел не говорит о том, сколько цветов глаз способен различить одновременно (человек видит примерно 10 миллионов различимых оттенков при хорошем освещении). Речь идёт о плавности переходов между цветами, которые глаз воспринимает. Именно в этом и заключается реальный смысл повышенной битовой глубины.
Проблема banding – что выглядит как «мало бит»
Вот практическая задача, в которой битовая глубина играет важную роль.
Посмотрите на закат или на медленное затухание в конце фильма. Небо плавно переходит от яркого оранжевого у горизонта к глубокому синему наверху, проходя через все промежуточные оттенки. Чтобы передать такой плавный переход в цифровом изображении, нужно множество едва различимых оттенков оранжевого и синего – каждый чуть-чуть отличается от соседнего. Если их достаточно, переход выглядит гладким, и вы не замечаете границ между цветами. А если оттенков не хватает – переход распадается на заметные полосы сплошного цвета, как контурные линии на карте.
Этот артефакт называется banding (или иногда «постеризация»), и его сразу узнают, как только поймёшь, что искать. Плавное небо превращается в полосатое, медленные переходы – в ступеньки. В тёмных сценах HDR тени выглядят как видимые пятна, хотя должны быть сплошными. 1
Почему так? Потому что 256 оттенков (8 бит) – это много на первый взгляд, но недостаточно, чтобы плавно передать весь диапазон яркости реальной сцены. Представьте: вы красите стену и у вас 256 банок краски, каждая – чуть более светлая, чем предыдущая, от чистого чёрного до чистого белого. Банки расположены равномерно. Если использовать их все на небольшом участке – переход выглядит плавным. Но если попытаться покрыть огромный градиент – например, весь диапазон яркости заката – придётся растянуть те же 256 оттенков на весь этот диапазон, и теперь ступеньки между соседними цветами станут заметны глазу. Это и есть banding.
10-битный формат даёт 1024 уровня на тот же диапазон. Шаг между соседними уровнями в четыре раза меньше. Для глаза это разница между заметной лестницей и плавным склоном. 12-битный формат обеспечивает 4096 уровней, при этом шаг между ними в шестнадцать раз меньше, чем у 8-битного. 2
Где полосатость проявляется сильнее всего
Три типа контента хуже всего проявляются при эффекте banding.
Плавное небо, закаты, подводные сцены. Каждый раз, когда в кадре доминирует один цвет, плавно переходящий от одного оттенка к другому, становится заметен banding. Свадебное видео, снятое в сумерках на фоне чистого неба, будет страдать от banding при 8-битной глубине цвета. Прямая трансляция из бассейна будет страдать от banding при 8-битной глубине цвета. Документальный фильм о природе на рассвете будет страдать от banding при 8-битной глубине цвета.
Тёмные сцены и детали в тенях. Самый худший случай для 8-битного цветового представления. Человеческий глаз наиболее чувствителен к различиям яркости в тёмных областях – именно там мы эволюционно научились замечать хищников. Шаги яркости между соседними 8-битными значениями в тенях воспринимаются особенно резкими, поэтому полосатость (banding) появляется в первую очередь именно в этих зонах. HDR-контент, намеренно насыщенный деталями в тенях, почти всегда требует 10-битного цветового представления, чтобы избежать banding в этих тёмных участках. 3
Медленные fade и dissolves. Любой переход в видео, где изображение постепенно темнеет до чёрного или плавно переходит между двумя сценами, находится под угрозой. Затухание проходит через сотни промежуточных уровней яркости – именно то, что 8-битная глубина цвета передаёт с трудом.
Если контент вашего продукта включает хотя бы часть из перечисленного в значительной доле, 10-битная глубина цвета окупается уже с первой претензии, которой вы не получите.
Арифметика «насколько больше данных?»
Теперь часть, важная для продакт-команды: во сколько обходится повышенная битовая глубина с точки зрения хранения, пропускной способности и обработки?
В несжатом видео объём данных прямо пропорционален количеству бит на канал. Увеличение с 8 до 10 бит на канал даёт 10/8 = 1,25, то есть рост на 25%. С 8 до 12 бит – 12/8 = 1,5, или прирост на 50%.
8 бит/канал → 24 бит/пиксель (RGB) или ~12 бит/пиксель (YCbCr 4:2:0)
10 бит/канал → 30 бит/пиксель (RGB) или ~15 бит/пиксель (YCbCr 4:2:0)
12 бит/канал → 36 бит/пиксель (RGB) или ~18 бит/пиксель (YCbCr 4:2:0)В сжатом видео – том самом, которое вы реально передаёте – цена гораздо ниже, чем может показаться. Хорошие кодеки (HEVC, AV1) на удивление эффективны: дополнительные биты оправданы, потому что более плавные градиенты в 10-битных данных сжимаются лучше, чем шумная 8-битная версия той же сцены. В реальных бенчмарках кодирование одной и той же 4K-сцены в 10-битном формате вместо 8-битного обычно требует лишь на 5–15% больше пропускной способности – а не 25%. Иногда 10-битный контент сжимается даже меньше, чем его 8-битный аналог, потому что энкодеру не приходится бороться с шумом артефактов banding. 4
Стоимость обработки сопоставима, но реальная. 10-битному декодеру требуется больше пропускной способности памяти и чуть больше ресурсов CPU на кадр по сравнению с 8-битным. На старом мобильном «железе» (телефоны до примерно 2019 года) это может проявляться в виде более быстрого разряда батареи или снижения производительности (throttling) под нагрузкой. На современных чипах – недавних iPhone, флагманских Android-устройствах, любых smart TV 2020 года и новее – разница незаметна.
HEVC Main10, AV1 и остальной кодек-ландшафт
Не каждый кодек поддерживает все возможные битовые глубины. Матрица имеет значение.
| Кодек | 8-bit | 10-bit | 12-bit | Заметки |
|---|---|---|---|---|
| H.264 (AVC) | ✓ | (только Hi10P, нет hardware decode) | ✗ | 10-битный профиль существует на бумаге, но почти ни одно потребительское устройство не декодирует его на железе. Используйте H.265. |
| H.265 (HEVC) | Main | Main10 | Main12 (редко) | Main10 – рабочая лошадка для всего: от стриминга до broadcast HDR. 5 |
| VP9 | Profile 0 | Profile 2 | ✗ | VP9 10-bit используется YouTube для HDR-контента. |
| AV1 | Main | Main | ✓ | AV1 проектировался под 10-bit и 12-bit с первого дня. |
| VVC (H.266) | ✓ | ✓ | ✓ | Полная поддержка битовой глубины; энкодеры и декодеры всё ещё созревают в 2026. |
Практический вывод: если нужен 10-битный цвет – используйте HEVC Main10 или AV1. Не пытайтесь использовать H.264 High 10. Теоретически это работает, но у потребительских устройств нет аппаратного декодера, поэтому воспроизведение переходит на программный декодер, быстро разряжает батарею и вызывает подтормаживания.
10-битный профиль HEVC был добавлен в стандарт в октябре 2012 года специально для поддержки цветового пространства Rec. 2020 и HDR-контента без артефактов полосатости. 5 С тех пор он стал основой любого коммерческого HDR-стриминга: Netflix HDR, Disney+ HDR, Apple TV+ HDR – все используют HEVC Main10 или AV1 с 10-битной глубиной. AV1 взял на себя ту же роль в новых развёртываниях; к 2026 году Netflix планирует выделять около 30% своего бюджета на битрейт под AV1, а примерно 85% его HDR-каталога будет использовать AV1 + HDR10+. 6
Парадокс «10-бит помогает и SDR»
Контринтуитивный факт, удивляющий каждую продакт-команду впервые: 10-битное кодирование может на самом деле сжать 8-битный исходник в файл меньшего размера, чем при использовании 8-битного кодирования.
Звучит невозможно – больше битов, значит, и файл должен быть больше? Но математика здесь тонкая. Когда энкодер работает во внутреннем 10-битном режиме, у него выше точность промежуточных вычислений. Ошибки округления, из-за которых в 8-битном режиме приходилось принимать чуть менее точные решения по цвету, в 10-битном режиме не возникают. Выход энкодера оказывается ближе к оригиналу, и меньше данных «тратится» на исправление шума от округления. Результат, по опубликованным бенчмаркам: 10-битное HEVC-кодирование 8-битного исходника обычно даёт файл такого же размера или даже чуть меньшего, чем при 8-битном HEVC, при этом выглядит заметно лучше на сценах с градиентами. 4
Это значит, что выбор 10-битной глубины цвета – не про «HDR ли мой контент?», а про «насколько богат мой контент градиентами?». Свадебное видео на закате выигрывает от 10-битной глубины, даже если оно никогда не будет отображаться в формате HDR.
Когда 10-битный формат избыточен, а 8-битный – правильный выбор
10-битная глубина цвета не бесплатна, и не каждый продукт её требует. Три категории, в которых 8-битный формат – правильный выбор:
Реал-тайм видеозвонки и конференции. WebRTC, Zoom-подобные звонки, телемедицинские консультации – всё это низкое разрешение, разнообразные устройства, а контент в основном – лица на фоне внутренних помещений. Градиентам там просто не от чего проявляться. 8-битная глубина цвета позволяет экономить заряд батареи и снижает нагрузку на процессор. Те немногие WebRTC-реализации, которые поддерживают 10-битный цвет (в основном экспериментальные), практически не дают прироста реального качества.
Surveillance-записи. Непрерывная запись с IP-камер. Основной лимит – стоимость хранения: месяцы видео с одной камеры. Контент редко насыщен градиентами (парковки, коридоры, лобби). При сопоставимой стоимости хранения 8-битный формат с разумным битрейтом почти всегда выигрывает у 10-битного.
User-generated short-form. TikTok-подобные ролики, загрузки в соцсетях, базовые VOD-платформы, где пользователи сами загружают видео. Исходный материал почти всегда 8-bit (большинство потребительских телефонов снимают 8-bit). Транскодирование его в 10-bit во время транскода не даёт реального качества, но удваивает нагрузку декода на каждом устройстве зрителя. Оставайтесь на 8-bit.
Полезный фильтр: если исходник снят в 10-бит (большинство профессиональных камер, недавние iPhone в режиме ProRes, ARRI Alexa, Sony Venice) – сохраняйте 10-бит на всём протяжении пайплайна. Если исходник 8-бит и вы не используете HDR-эффекты – переход на 10-бит не принесёт существенной пользы.
Dithering – приём, спасающий 8-бит, когда выше не подняться
Есть ещё один концепт, который стоит знать, потому что он часто встречается в спецификациях и технических обсуждениях: dithering (дитеринг).
Dithering – это намеренное добавление небольшого случайного шума в градиент до его преобразования в более низкую битовую глубину. Этот метод работает, потому что человеческий глаз усредняет шум между соседними пикселями. Там, где banding создаёт резкий переход между двумя сплошными оттенками, dithering равномерно распределяет несколько «неправильных» пикселей по границе – и глаз воспринимает зашумлённую линию как плавный переход, а не как ступенчатую границу.
Любой хороший энкодер, монитор или телевизор применяет какую-либо форму dithering, когда преобразует более высокую битовую глубину в более низкую. Современные OLED-телевизоры активно используют дитеринг, чтобы отображать 10-битный контент на по сути 8-битной матрице (большинство «10-битных» телевизоров – это 8-бит + frame-rate-controlled dither, или 8-бит + FRC). Результат достаточно хорош, чтобы большинство зрителей не заметили разницы. Если вы вынуждены использовать 8-битный выход, программный дитеринг восстановит большую часть качества, которое дал бы 10-битный сигнал, без дополнительных затрат на кодирование. В FFmpeg для этого предназначен флаг dither.
Чем мы занимаемся в Фора Софт
Когда мы создаём видеопродукт, вопрос битовой глубины возникает рано. Для OTT-стриминга с HDR-амбициями мы сразу используем HEVC Main10 или AV1 – затраты минимальны, а future-proofing того стоит. В telemedicine и surveillance мы рекомендуем 8-бит по умолчанию: контенту этого достаточно, а экономия на хранении ощутима. В онлайн-обучении выбор зависит от типа контента: если есть screen-captures, нужна более высокая битовая глубина, чтобы избежать banding на градиентах слайдов; если же это просто «говорящие головы» – 8-бит вполне достаточно. Вопрос не в том, «хотим ли мы качество?», а в том, «где в этом пайплайне битовая глубина реально становится узким местом?». Именно этот вопрос помогает поставить статья.
Ключевые выводы
- Битовая глубина – это количество бит, используемых для кодирования одного канала одного пикселя. 8-бит = 256 оттенков на канал, 10-бит = 1024, 12-бит = 4096.
- Banding – видимые полосы в плавном градиенте – главный визуальный дефект, характерный для 8-бит, и основная причина перехода на 10-бит.
- Плавное небо, тёмные сцены, медленные затухания и HDR-контент страдают от banding при 8-бит и заметно улучшаются при переходе на 10-бит.
- 10-бит требует на 25% больше сырых данных, но в сжатом виде обычно добавляет лишь 5–15%. Иногда 10-битное кодирование даже занимает меньше места, чем 8-бит, поскольку градиенты сжимаются эффективнее.
- Для доставки HDR: используйте HEVC Main10 или AV1 Main 10-бит. Избегайте H.264 High10 – у него нет надёжных аппаратных декодеров.
- WebRTC, видеонаблюдение и пользовательский короткометражный контент нормально работают в 8-бит. Премиум-стриминг, вещание и любой профессиональный контент с богатыми градиентами – только 10-бит.
Что читать дальше
- Что такое цифровое видео: от аналогового сигнала к битам
- Цветовые пространства: RGB, YCbCr, BT.709, BT.2020, DCI-P3
- Полный гид по HDR: HDR10, HDR10+, Dolby Vision, HLG
Источники
- Механика 8-битного banding; 10-bit устраняет видимые полосы в градиентах. Video Color Depth Explained: 8-Bit vs 10-Bit, Flipper File. https://flipperfile.com/video-file-guides/video-color-depth-explained/
- Сравнение количества значений и плавности градиентов 8/10/12-bit. Bit Depth in Video: 8-bit, 10-bit, and 12-bit Explained, Zencopa. https://zencopa.com/learn/bit-depth-in-video-8-bit-10-bit-and-12-bit-explained
- Детали в тенях и человеческая чувствительность к тёмным областям; HDR требует минимум 10-bit. Why Video Bit-depth Matters, Larry Jordan. https://larryjordan.com/articles/why-video-bit-depth-matters-2/
- 10-bit HEVC-кодирование 8-bit-исходника часто соответствует или обходит размер 8-bit. AVC vs. HEVC, 8-bit vs. 10-bit Video Encoding, Archimago's Musings. http://archimago.blogspot.com/2016/12/quick-compare-avc-vs-hevc-8-bit-vs-10.html
- HEVC Main 10 добавлен в октябре 2012 специально для Rec. 2020 / HDR во избежание banding. Wikipedia: High Efficiency Video Coding. https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding