Битовая глубина: 8, 10, 12 бит и проблема banding

Автор: Николай СапуновОбновлено: август 202614 мин чтения
Содержание статьи +

TL;DR

Битовая глубина – это количество цифр, которыми видео записывает один оттенок одного цвета в одном пикселе. Привычное число – 8 бит, что даёт 256 различных оттенков красного, зелёного и синего: достаточно для обычного контента, но мало для самых плавных градиентов, которые видит глаз. HDR-видео использует 10 или 12 бит – 1024 или 4096 оттенков на канал – и именно это не даёт небу превратиться в видимые «полосы» вместо плавного перехода. Этот артефакт называется banding, и это главная причина, почему битовая глубина вообще имеет значение в продуктовом решении. Компромисс конкретен: 10-битное видео занимает примерно на 25% больше места и обработки, чем 8-битное, а 12-битное – на 50% больше, в обмен на огромный скачок качества в тенях, на небе и в любых сценах с тонкими цветовыми переходами.

Зачем это знать

Если вы строите видеопродукт – Netflix-стриминг, видеоконференции, telemedicine, онлайн-обучение – вас рано или поздно спросят «нужно ли тут 10-бит?», и придётся знать, что в действительности на кону. Ответ зависит от трёх вещей: есть ли в вашем контенте плавные градиенты, которые должны выглядеть плавно; могут ли целевые устройства показать 10-бит корректно; можете ли вы позволить себе дополнительную нагрузку на обработку. Эта статья даёт модель для ответа на этот вопрос без угадывания. К концу вы будете знать ровно когда 10-бит окупается, когда 12-бит избыточно, и когда 8-бит – правильный ответ вопреки энтузиастам спек-листов.

Будем строить картину пошагово, без предварительных знаний. Каждый термин будем определять до его использования.

Что такое «битовая глубина» на самом деле

Начнём со слова бит само по себе. Бит – это наименьшая единица информации, которую может хранить компьютер: либо 0, либо 1, on или off, да или нет. Это всё. Всё внутри компьютера построено из бит.

Когда биты собираются вместе, они дают возможность считать дальше. Один бит позволяет считать до 2 (значения 0 и 1). Два бита дают 4 (00, 01, 10, 11). Три бита – 8 (от 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-bit: 256 × 256 × 256 ≈ 16,7 миллиона цветов.
  • 10-bit: 1024 × 1024 × 1024 ≈ 1,07 миллиарда цветов.
  • 12-bit: 4096 × 4096 × 4096 ≈ 68,7 миллиарда цветов.

Миллиард цветов звучит как маркетинговый слоган, а 68 миллиардов – как абсурд. Но ни одно из этих чисел не про то, сколько цветов глаз способен различить одновременно (не способен – человеческий глаз видит примерно 10 миллионов различимых цветов в хорошем освещении). Они про плавность переходов между цветами, которые глаз видит. Именно в этом реальный смысл повышенной битовой глубины.

Проблема banding – что выглядит «мало бит»

Вот практическая задача, делающая битовую глубину важной.

Посмотрите на фото заката или медленное затухание в конце фильма. Небо плавно переходит от яркого оранжевого у горизонта к глубокому синему наверху, проходя все оттенки между. Чтобы передать этот плавный переход в цифровом изображении, нужно много чуть-чуть различающихся оттенков оранжевого и синего, каждый – на волосок отличный от соседа. Если оттенков хватает – переход выглядит плавным, и вы не видите, где один заканчивается, а следующий начинается. Если оттенков не хватает – переход разбивается на видимые полосы сплошного цвета, как контурные линии на карте.

Этот артефакт называется banding (или иногда «постеризация»), и его мгновенно узнаёшь, как только понимаешь, что искать. Плавное небо превращается в полосатое. Медленные затухания показывают ступеньки. Тёмные сцены в HDR разворачиваются видимыми пятнами там, где должна быть единая тень. 1

Почему так? Потому что 256 оттенков (8-бит) звучит как много, но недостаточно, чтобы покрыть весь диапазон яркости реальной сцены гладко. Представьте: вы красите стену и у вас 256 банок краски, каждая чуть отличающийся оттенок серого, от чистого чёрного до чистого белого. Банки расположены равномерно. Если использовать их все на небольшом участке – выглядит плавно. Но если попытаться покрыть огромный градиент – скажем, полный диапазон яркости заката – придётся растянуть те же 256 банок на весь этот диапазон, и теперь ступеньки между соседними банками становятся видимы глазу. Это и есть banding.

10-бит даёт 1024 банки на тот же диапазон. Ступеньки между соседними банками в четыре раза меньше. Для глаза это разница между видимой лестницей и непрерывным склоном. 12-бит даёт 4096 банок, со ступеньками в шестнадцать раз меньшими, чем у 8-бит. 2

Рис. 1. Один и тот же плавный градиент в трёх битовых глубинах. 8-bit даёт видимые полосы (banding) на тонких переходах. 10-bit резко их уменьшает. 12-bit достаточно гладкий, что глаз не различает ступеньку.

Где banding бьёт сильнее всего

Три типа контента показывают banding хуже всего.

Плавное небо, закаты, подводные сцены. Каждый раз, когда картинку доминирует один цвет, плавно переходящий из одного оттенка в другой, banding виден. Свадебное видео, снятое в сумерках на фоне чистого неба, будет банить на 8-bit. Прямая трансляция из бассейна будет банить на 8-bit. Документалка про природу на рассвете будет банить на 8-bit.

Тёмные сцены и детали в тенях. Самый худший случай для 8-bit. Человеческий глаз наиболее чувствителен к различиям яркости в тёмных областях – там мы эволюционировали замечать хищников. Шаги яркости между соседними 8-битными значениями в тенях воспринимаются огромными, поэтому banding в первую очередь появляется именно там. HDR-контент, намеренно вкладывающий больше деталей в тени, почти всегда требует 10-bit, чтобы избежать banding в этих тёмных зонах. 3

Медленные fade и dissolves. Любой переход в видео, где картинка медленно гаснет в чёрный или кросс-фейдит между двумя сценами, под угрозой. Затухание проходит через сотни промежуточных уровней яркости – ровно то, что 8-bit с трудом передаёт плавно.

Если контент вашего продукта включает хотя бы что-то из этого как значимую долю, 10-bit окупает себя на первой же претензии, которую вы не получите.

Арифметика «насколько больше данных?»

Теперь часть, которая важна продакт-команде: сколько повышенная битовая глубина стоит в хранении, полосе и обработке?

В сыром, несжатом видео ответ ровно пропорционален приросту бит. 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-bit вместо 8-bit обычно стоит только 5–15% больше полосы, не 25%. Иногда 10-битный контент даже сжимается меньше своего 8-битного эквивалента, потому что энкодеру не приходится сражаться с шумом banding-артефактов. 4

Стоимость обработки аналогична, но реальна. 10-битному декодеру нужно больше memory bandwidth и чуть больше CPU на кадр, чем 8-битному. На старом мобильном железе (телефоны до примерно 2019 года) это может проявляться как разряд батареи или throttling под нагрузкой. На современных чипах – недавние iPhone, флагманские Android, любые smart TV 2020+ – разница невидима.

HEVC Main10, AV1 и остальной кодек-ландшафт

Не каждый кодек поддерживает каждую битовую глубину. Матрица важна.

Кодек8-bit10-bit12-bitЗаметки
H.264 (AVC)(только Hi10P, нет hardware decode)10-битный профиль существует на бумаге, но почти ни одно потребительское устройство не декодирует его на железе. Используйте H.265.
H.265 (HEVC)MainMain10Main12 (редко)Main10 – рабочая лошадка для всего: от стриминга до broadcast HDR. 5
VP9Profile 0Profile 2VP9 10-bit используется YouTube для HDR-контента.
AV1MainMainAV1 проектировался под 10-bit и 12-bit с первого дня.
VVC (H.266)Полная поддержка битовой глубины; энкодеры и декодеры всё ещё созревают в 2026.

Практический вывод: если нужен 10-bit – используйте HEVC Main10 или AV1. Не пытайтесь использовать H.264 High 10. Теоретически работает, но у потребительских устройств нет железного декодера, поэтому воспроизведение падает на software-декод, разряжает батарею и заикается.

10-битный профиль HEVC был добавлен в стандарт в октябре 2012 года именно для поддержки цветового пространства Rec. 2020 и HDR-контента без banding-артефактов. 5 С тех пор это база любого коммерческого HDR-стриминга (Netflix HDR, Disney+ HDR, Apple TV+ HDR – все используют HEVC Main10 или AV1 Main 10-bit). AV1 подхватил ту же роль для новых развёртываний; в 2026 году Netflix выделяет около 30% своего bitrate-бюджета на AV1, а примерно 85% его HDR-каталога использует AV1 + HDR10+. 6

Парадокс «10-bit помогает и SDR»

Контринтуитивный факт, удивляющий каждую продакт-команду в первый раз. 10-битное кодирование может на самом деле сжать 8-битный исходник в файл меньше, чем 8-битное кодирование.

Звучит невозможно – больше бит точно значит больше файл? Но математика тонкая. Когда энкодер работает внутри в 10-бит, у него больше точности в промежуточных вычислениях. Ошибки округления, которые в 8-bit вынуждали бы принять чуть неправильное решение по цвету, в 10-bit не возникают. Выход энкодера ближе к оригиналу, меньше «потраченных» данных уходит на исправление того же шума округления. Результат, по опубликованным бенчмаркам: 10-битное HEVC-кодирование 8-битного исходника обычно даёт файл такого же размера или чуть меньше, чем 8-битное HEVC, при этом выглядит заметно лучше на сценах с градиентами. 4

Это значит, что решение про 10-bit – это не «мой контент HDR?», а «мой контент богат градиентами?». Свадебное видео на закате выигрывает от 10-bit, даже если оно никогда не будет HDR.

Когда 10-bit избыточен, когда 8-bit – правильный ответ

10-bit не бесплатен, и не каждый продукт его требует. Три категории, где 8-bit – правильный выбор:

Реал-тайм видеозвонки и конференции. WebRTC, Zoom-подобные звонки, telemedicine-консультации – это низкие разрешения, очень разные устройства, и контент в основном – лица на фоне внутренних стен. Градиентам там негде взяться. 8-bit держит низкими разряд батареи и нагрузку CPU. Те немногие WebRTC-реализации, которые поддерживают 10-bit (в основном экспериментальные), почти ничего не выигрывают по реальному качеству.

Surveillance-записи. Непрерывная запись с IP-камер. Стоимость хранения – основное ограничение: месяцы записей с камеры. Контент также редко богат градиентами (парковки, коридоры, лобби). 8-bit на разумном битрейте побеждает 10-bit при той же стоимости хранения почти всегда.

User-generated short-form. TikTok-подобные ролики, загрузки в соцсетях, базовые VOD-платформы, где пользователи сами загружают видео. Исходный материал почти всегда 8-bit (большинство потребительских телефонов снимают 8-bit). Транскодирование его в 10-bit во время транскода не даёт реального качества, но удваивает нагрузку декода на каждом устройстве зрителя. Оставайтесь на 8-bit.

Полезный фильтр: если исходник снят в 10-bit (большинство pro-камер, недавние iPhone в режиме ProRes, ARRI Alexa, Sony Venice) – держите 10-bit через весь пайплайн. Если исходник 8-bit и вы не добавляете HDR-эффектов – кодирование в 10-bit мало что даст.

Рис. 2. Decision tree для выбора битовой глубины. Правильный ответ зависит от типа контента, целевых устройств и того, в скольких битах уже снят исходник.

Dithering – приём, спасающий 8-bit, когда выше не уйти

Есть ещё один концепт, который стоит знать, потому что он встречается в спек-листах и инженерных разговорах: dithering (дитеринг).

Dithering – это намеренное добавление небольшого случайного шума в градиент до его кодирования в более низкую битовую глубину. Это работает, потому что человеческий глаз усредняет шум в соседних пикселях. Там, где banding нарисовал бы жёсткий край между двумя сплошными оттенками, dither размазывает несколько «неправильных» пикселей через границу – и глаз читает зашумлённую границу как плавный переход вместо резкой ступеньки.

Любой хороший энкодер, монитор и ТВ применяет какую-то форму dithering, когда сводит более высокую битовую глубину в более низкую. Современные OLED-телевизоры агрессивно дитерят, чтобы показать 10-битный контент на по сути 8-битной панели (большинство «10-битных» ТВ – это 8-bit + frame-rate-controlled dither, или 8-bit + FRC). Результат достаточно хороший, что большинство зрителей не отличат. Если вы застряли на 8-битном выходе, software-dithering восстановит большую часть качества, которое дал бы 10-bit, без затрат на кодирование. В FFmpeg для этого есть флаг dither.

Чем мы занимаемся в Фора Софт

Когда мы скопим видеопродукт, вопрос битовой глубины встаёт рано. Для OTT-стриминга с HDR-амбициями мы отгружаем HEVC Main10 или AV1 со дня один – стоимость минимальна, а future-proofing того стоит. Для telemedicine и surveillance мы рекомендуем 8-bit по умолчанию: контенту больше не нужно, а экономия хранения реальна. Для онлайн-обучения ответ зависит от того, включает ли контент screen-captures (где нужна более высокая битовая глубина, чтобы избежать banding на градиентах слайдов) или это просто говорящие головы (8-bit нормально). Вопрос никогда не «хотим ли мы качество?», а «где в этом пайплайне битовая глубина реально ограничивает?». Именно этот вопрос статья помогает задать.

Ключевые выводы

  • Битовая глубина – это количество бит, записывающих один канал одного пикселя. 8-bit = 256 оттенков на канал, 10-bit = 1024, 12-bit = 4096.
  • Banding – видимые полосы в плавном градиенте – главный видимый дефект, который производит 8-bit, и главная причина переходить на 10-bit.
  • Плавное небо, тёмные сцены, медленные fade и HDR-контент – все страдают banding на 8-bit и резко улучшаются на 10-bit.
  • 10-bit стоит +25% сырых данных, но обычно только 5–15% в реальной сжатой полосе. Иногда 10-bit-кодирование даже меньше 8-bit, потому что градиенты лучше сжимаются.
  • Для HDR-доставки: используйте HEVC Main10 или AV1 Main 10-bit. Избегайте H.264 High10 – нет железных декодеров.
  • WebRTC, surveillance и user-generated short-form нормальны в 8-bit. Премиум-стриминг, broadcast и любой богатый градиентами профессиональный контент – 10-bit.

Что читать дальше

Источники

  1. Механика 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/
  2. Сравнение количества значений и плавности градиентов 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
  3. Детали в тенях и человеческая чувствительность к тёмным областям; HDR требует минимум 10-bit. Why Video Bit-depth Matters, Larry Jordan. https://larryjordan.com/articles/why-video-bit-depth-matters-2/
  4. 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
  5. HEVC Main 10 добавлен в октябре 2012 специально для Rec. 2020 / HDR во избежание banding. Wikipedia: High Efficiency Video Coding. https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding
  6. В 2026 году Netflix выделяет ~30% bitrate-бюджета на AV1; ~85% HDR-каталога – AV1 + HDR10+. Industry adoption summary, по данным Netflix Tech Blog и Bitmovin Video Developer Report 2026.

Строите такую систему?

Подберём параметры кодирования под ваш контент и посчитаем стоимость доставки до старта разработки.