Психо-визуальная избыточность: то, чего зритель всё равно не увидит

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

TL;DR

Человеческий глаз хорошо различает одни вещи и плохо – другие, и современный видеокодек тратит почти весь свой битовый бюджет на то, чтобы прятать искажения там, куда зритель смотрит в последнюю очередь. Психо-визуальная избыточность – это разница между тем, что записывает сенсор камеры, и тем, что мозг зрителя действительно использует: разрешение цвета, которое глаз не различает; высокие пространственные частоты, к которым он слабо чувствителен; ошибки в движении, которые маскируются движением; кадры, на которых детали невозможно успеть разглядеть. От JPEG до AV1 кодеки эксплуатируют эту разницу тремя способами: chroma subsampling, который сразу выбрасывает большую часть цветовых данных; перцептивные таблицы квантования, которые тратят больше бит на частоты, важные для глаза; и adaptive quantization, который прячет потерю качества в текстурных, тёмных или быстро движущихся областях. Грамотный психо-визуальный кодинг даёт 10–40% экономии битрейта при той же воспринимаемой картинке – именно поэтому 3-мегабитный Netflix-стрим на обычном телевизоре выглядит как 12-мегабитный mezzanine.

Зачем это нужно

Если вы делаете, покупаете или эксплуатируете любой продукт, который отдаёт видео, психо-визуальная избыточность – это рычаг, который определяет, сколько на самом деле стоит ваш CDN, ваша энкодинг-ферма и отток зрителей. Команда, которая понимает, какие флаги энкодера влияют на воспринимаемое качество, отдаёт 1080p на битрейте, на котором соседи отдают 720p, – и зрители не отличают. То же понимание подсказывает, когда 4:4:4 chroma – это реальное требование (постпродакшен, screen sharing, телемедицина), а когда – дорогая прихоть (массовый стриминг). Промахнётесь – и потратите биты на то, чего глаз не увидит, или сэкономите на тех немногих местах, где он смотрит, и зрители будут жаловаться на «мыло» или «блочность», не умея описать, что именно их раздражает. Эта статья проводит нетехнического читателя от «глаз – это не камера» к рабочей модели psy-rd, AQ-режимов и per-title encoding.

Что вообще такое «психо-визуальная избыточность»

В термине три части, и порядок важен. «Психо-» – про восприятие: что мозг делает с сигналом после того, как глаз его поймал. «Визуальная» – напоминание, что речь про картинку, а не, скажем, про аудиомаскировку в MP3. «Избыточность» – инженерный термин для информации, которую можно выбросить без последствий.

Сложите: психо-визуальная избыточность – это часть видеосигнала, которую энкодер может выбросить, потому что система восприятия зрителя её всё равно бы отбросила. Это не та избыточность, которую кодек удаляет между соседними пикселями (это пространственная избыточность) или между соседними кадрами (это временная избыточность). Эти две – статистические: данные повторяются. Психо-визуальная избыточность – перцептивная: данные уникальные, но зритель их не заметил бы.

Полезная аналогия. Представьте курьера, который доставляет договор на 100 страниц. Пространственная и временная избыточности – это страницы, дублирующие то, что уже доставлено: курьер их сжимает, и получатель всё равно получает полный документ. Психо-визуальная избыточность – это юридический язык на 73-й странице, который никто читать не будет: курьер заменяет его одной строкой резюме, и поведение получателя не меняется. У глаза, как и у читателя контракта, бюджет внимания ограничен. Кодек, который знает, на что этот бюджет тратится, перестаёт спускать биты на те куски, которые глаз пропускает.

Это третий столп каждого современного кодека наряду с пространственной и временной компрессией. Различие «нерелевантная информация» vs «избыточная информация» появилось ещё в теории информации Клода Шеннона, а первым широко развернутым стандартом, который всерьёз учёл психо-визуальную модель, был JPEG в 1992 году.1 Каждый следующий кодек строил поверх той же идеи и уточнял модель: MPEG-2 добавил scene-adaptive quantization, H.264 – psychovisual-aware deblocking в петле, HEVC – более точные quantization matrices, AV1 – adaptive-quantization сегменты с saliency-весом.

Рисунок 1. Три вида избыточности, которые кодек эксплуатирует. Первые два – статистические свойства сигнала; третий – свойство зрителя.

Как глаз на самом деле видит

Прежде чем переходить к трюкам, нужна грубая модель того, что глаз делает хорошо и что плохо. На сетчатке две основные популяции фоторецепторов. Палочки преобладают на периферии и в условиях низкой освещённости, цвет не различают и количественно превосходят колбочки примерно 18 к 1.2 Колбочки отвечают за дневное зрение и бывают трёх подтипов – длинноволновые, средневолновые и коротковолновые, что мы упрощаем до «красные, зелёные, синие». Подтипов не поровну, и сосредоточены они в маленьком центральном пятне сетчатки – фовеа. За её пределами цветовое разрешение падает очень быстро.

Мозг сводит сигналы палочек и колбочек в два почти независимых канала, названных по терминологии телевизионных инженеров, которые их первыми измерили. Один канал – luma – несёт яркость, ту самую характеристику, на которой сильны палочки: высокое пространственное разрешение и высокая контрастная чувствительность. Второй канал – chroma – несёт цвет, имеет примерно вдвое меньшее пространственное разрешение и заметно более низкую чувствительность к мелкой детали.3 Это не выдумка кодеков, а свойство зрительного тракта, измеряемое психофизическими опытами с 1950-х.

Из этого разделения вытекают три практических следствия. Первое: можно выбросить большую часть цветового разрешения, и зритель не заметит. Это основа chroma subsampling и причина того, что 4:2:0 живёт почти во всех потребительских видеоформатах. Второе: глаз гораздо чувствительнее к luma на низких и средних пространственных частотах, чем на высоких. Число, которое это формализует – зависимость чувствительности от циклов на градус зрительного угла – называется contrast sensitivity function (CSF), оно пиково в диапазоне 4–6 циклов/градус и быстро спадает с обеих сторон.4 Третье: чувствительность глаза к ошибке в любой области резко падает, когда эта область сложная, тёмная или быстро движется, – соседний более приоритетный сигнал «забивает» восприятие шума. Это явление называется маскировкой.

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

Рисунок 2. Контрастная чувствительность глаза не плоская. Пик в середине, спад с обеих сторон – отсюда и происходит частотно-взвешенное квантование.

Трюк 1 – Chroma subsampling: половина данных, потери не видно

Первый и самый крупный психо-визуальный трюк кодека – выбросить три четверти цветовых данных ещё до собственно компрессии. Механика простая. Сигнал приходит с сенсора в каком-то RGB-виде; энкодер переводит его в представление «яркость + два цветовых канала» (Y′CbCr, BT.709, BT.2020); затем chroma-плоскости даунсэмплятся. Доминирующий формат – 4:2:0: полное разрешение по luma, chroma в половине разрешения и по горизонтали, и по вертикали. Luma-плоскость 1920×1080 сохраняет каждый пиксель; две chroma-плоскости несут только по 960×540 значений.

Посчитайте один раз. Сырой кадр 4:4:4 в 1080p при 8 битах на сэмпл – это 1920 × 1080 × 3 × 8 = 49.8 Мбит на кадр. Тот же кадр в 4:2:0 – (1920 × 1080 + 2 × 960 × 540) × 8 = 24.9 Мбит, ровно вдвое меньше.5 Кодек ещё ни одного шага сжатия не сделал, а уже уменьшил картинку на 50%, причём на обычном экране на обычном расстоянии непрофессионал не отличит 4:4:4 от 4:2:0. Это и есть психо-визуальная избыточность в чистом виде: данные были реальные, но система восприятия их всё равно бы не использовала.

Короткая проверка реальностью. Chroma subsampling не бесплатен везде. На screen-share с резким красным текстом на синем фоне разрешение цветовой границы важно – 4:2:0 даёт видимое цветовое окаймление вдоль букв. Тот же эффект на мелких насыщенных узорах – ткани, компьютерной графике, линиях анимации, телемедицинских снимках кожных образований, где диагностическая ценность сидит на границе цвета. Эти пайплайны идут в 4:2:2 (chroma половина по горизонтали, полная по вертикали) или 4:4:4 (chroma без редукции). Сравнение:

SamplingLumaChroma на плоскостьСтоимость, бит/пиксельВидимая потеря на натуральном видеоГде живёт
4:4:4полнаяполная100%нетмедицинская визуализация, постпродакшен, screen capture
4:2:2полная1/2 по горизонтали67%незаметна на большинстве сюжетовbroadcast-ингест, профессиональные камеры
4:2:0полная1/4 (обе оси)50%трудно увидеть на натуральном видео с обычной дистанциикаждый стриминг-кодек; YouTube, Netflix, эфирная доставка
4:1:1полная1/4 по горизонтали50%видна на красных диагональных границахустаревший DV / NTSC

Вывод для продуктовых команд: 4:2:0 – правильный дефолт для любой доставки, а гонка за 4:4:4 в потребительском стриминге – почти всегда ошибочная трата бит. Исключение – вертикали, где ценность картинки лежит в chroma-канале; там обычно достаточно 4:2:2.

Рисунок 3. Три chroma-раскладки, имеющие практическое значение. Потерянное разрешение цвета – ниже порога восприятия на натуральном контенте, а сэкономленные байты – реальные деньги.

Трюк 2 – Quantization matrices: тратить биты там, где глаз чувствителен

После прореживания chroma-плоскости кодек делит каждый кадр на маленькие блоки и прогоняет через частотное преобразование. Преобразование – Discrete Cosine Transform в классических кодеках, integer-приближения в современных – превращает блок пикселей в блок коэффициентов, по одному на каждую пространственно-частотную компоненту. Верхний-левый коэффициент – DC: средняя яркость блока. Нижний-правый – самая высокая частота: самая мелкая текстура.

Затем энкодер квантует каждый коэффициент – делит на шаг и округляет. Quantization – это место, где собственно происходит lossy-сжатие, и это рычаг, на который психо-визуальная модель давит сильнее всего. Идея: вместо одинакового шага для всех коэффициентов использовать разные шаги по частотам – маленький шаг (точность сохраняется) для частот, к которым глаз чувствителен, и большой шаг (точность отбрасывается) – для тех, к которым нечувствителен. Таблица шагов и есть quantization matrix.

Исходная quantization matrix JPEG из 1992 – первая широко развернутая психо-визуальная таблица.6 Её построили из психофизических экспериментов: показать испытуемому две картинки и спросить, при какой амплитуде он различает их, – эта амплитуда становится шагом квантования. В нормализованном виде матрица выглядит так:

16  11  10  16  24  40  51  61
12  12  14  19  26  58  60  55
14  13  16  24  40  57  69  56
14  17  22  29  51  87  80  62
18  22  37  56  68 109 103  77
24  35  55  64  81 104 113  92
49  64  78  87 103 121 120 101
72  92  95  98 112 100 103  99

Читайте как тепловую карту. Низкие частоты (верхний левый угол) получают шаги 11–16 – переживают почти без потерь. Высокие частоты (нижний правый угол) – шаги 99–121, в 6–8 раз грубее, и большинство этих коэффициентов после квантования становятся нулями. Матрица не симметрична: горизонтальные и вертикальные частоты весят чуть по-разному, диагональные – жёстче всего, потому что и сама контрастная чувствительность глаза анизотропна. Результат: примерно 90% видимой информации сидит в верхней-левой трети блока, и кодек тратит туда же 90% бит.

Современные кодеки несут собственные scaling lists, а не JPEG-матрицу, но идея ровно та же. H.264 несёт дефолтный 8×8 scaling list, выведенный из измерений CSF; HEVC поддерживает отдельные матрицы под каждый размер преобразования и тип среза; VVC и AV1 хранят quantization matrices, индексированные и по размеру блока, и по режиму prediction.7 Гранулярность стала тоньше, но философия за 34 года не изменилась: квантуй слепые зоны глаза в первую очередь.

Распространённая ошибка – называть quantization matrices «алгоритмом сжатия». Это не алгоритм. Это политика распределения бит, надстроенная над квантованием; сама математика «делить и округлять» не меняется. Матрица решает, какие коэффициенты выживут при заданном целевом битрейте. Отключите её (закодируйте с плоским scaling list) – и получите равное число бит на каждую частоту, включая невидимые: тот же битрейт, ниже воспринимаемое качество. Большинство энкодеров включают матрицы по умолчанию, поэтому обычно об этом не думают; но если вам достался профиль, где их отключили «для совместимости», включить обратно – одна из самых дешёвых побед по качеству.

Трюк 3 – Adaptive quantization: бо́льшие ошибки там, где глаз их не увидит

Quantization matrices меняют бит-бюджет внутри блока – по частотам. Adaptive quantization (AQ) меняет бит-бюджет между местами кадра – по координате. Принцип: больше бит – областям, на которые зритель смотрит, меньше – областям, на которые он не смотрит.

Три свойства делают область удобной для «недокодирования»: высокая пространственная дисперсия (текстура), низкая luma (тёмные зоны) и высокое локальное движение. Первое – дисперсия – самое мощное, потому что включает contrast masking. Способность глаза заметить дефект внутри сложной текстуры значительно ниже, чем на гладкой поверхности. Покажите человеку гладкое синее небо с лёгким compression-блоком – он его увидит сразу. Покажите тот же блок в ткани или среди шевелящейся листвы – он его не найдёт.

Опенсорс-энкодеры дают этот рычаг напрямую. SVT-AV1 в variance-based AQ берёт дисперсии блоков 8×8, 16×16, 32×32 и 64×64 как прокси контраста и сдвигает QP вверх или вниз поблочно.8 x264 называет то же самое «AQ mode 1» (variance AQ) и «AQ mode 2» (auto-variance AQ); силу задаёт --aq-strength, дефолтные значения покрывают 60–80% доступной перцептивной экономии без визуального «дыхания».9 x265 добавляет saliency-вход – оценку того, куда зритель скорее всего посмотрит, из ML-моделей, обученных на eye-tracking. Эффект на реальном контенте не теоретический: измерения показывают 10–25% экономии битрейта при том же VMAF и дополнительные 6% поверх уже настроенного HEVC-пайплайна.10

Вторая ось – luma – эксплуатирует пониженную чувствительность глаза к шуму в тёмных областях. Механика та же: в тени локальная яркость низкая, шумовой пол колбочек высокий, поэтому ошибка квантования, например, на 4 уровня – невидима. Поднимаете QP в тенях – экономите биты без видимой цены. В некоторых реализациях AV1 даже отдельный флаг --enable-dark-region-boost.

Третья ось – движение – самая контринтуитивная. Быстро движущаяся область имеет высокую временну́ю энергию, и система слежения глаза меняет пространственную остроту на стабильную фиксацию. Получается temporal masking: несколько кадров с ошибкой квантования во время резкой склейки или быстрой панорамы – невидимы. Современные энкодеры детектят склейки и поднимают QP на первых одном-двух B-кадрах после склейки, понимая, что система восприятия в этот момент перестраивается под новую сцену. Эффект достаточно велик, чтобы scene-cut quantization стал стандартом в любом коммерческом кодеке.

Рисунок 4. Карта adaptive quantization на одном кадре. Энкодер делает четыре ставки одновременно: больше бит небу, меньше – текстуре, меньше – тени, меньше – движению.

Четвёртый рычаг – `psy-rd` и «глаз предпочитает детали точности»

Есть ещё один психо-визуальный инструмент, который стоит знать, потому что он меняет, как энкодер делает свой главный выбор: каким способом сжать вот этот блок. Этот выбор называется rate-distortion optimization (RDO) – взять режим кодирования, дающий лучший баланс между битами и искажением. По умолчанию «искажение» меряют просто sum-of-squared-error относительно источника: попиксельное сравнение.

Проблема плоского SSE в том, что он награждает размытие. Гладкая, заглаженная реконструкция имеет низкий SSE против оригинала даже если потеряла всю текстуру; резкая, но слегка неверная – высокий SSE, даже если зрителю выглядит ближе к источнику. Без присмотра SSE-оптимизирующий энкодер будет размывать всегда – математика так считает. Зрителям это не нравится. Они стабильно предпочитают слегка неверную, но детальную реконструкцию заглаженной правильной.11

Лекарство – добавить в функцию стоимости второе слагаемое: штраф за блоки, чья визуальная «энергия» (содержание высоких частот) отличается от источника. В x264 эта реализация называется psy-rd и идёт с дефолтом 1.0; x265 переделал её под HEVC; AV1-энкодеры несут аналог под именами psy-rdoq и psy-tune. Эффект ровно такой, какой обещает математика: энкодер тратит чуть больше бит на удержание текстуры и чуть меньше – на попадание в точные пиксельные значения. Объективные метрики (PSNR, простейшее попиксельное сравнение) проседают на доли; перцептивные (SSIM, VMAF) и оценки зрителей – растут. Это один из немногих случаев в видео, когда более низкий PSNR действительно значит лучшее качество.11

Урок шире одного параметра. PSNR – буквалист, человеческий глаз – нет. Психо-визуальный энкодер построен вокруг второго факта, а любой тулчейн, чья единственная цель по качеству – PSNR, оставляет 5–15% воспринимаемого качества на полу. Это и есть тот зазор, который VMAF и другие перцептивные метрики пришли закрывать.

Где здесь Фора Софт

Мы строим стриминг, видеоконференции, телемедицину и OTT-системы, где психо-визуальные решения – не академия, а разница между прибыльной bitrate-лестницей и той, что бьёт по бизнес-кейсу. В наших стриминг-проектах мы регулярно подбираем chroma-формат, силу AQ и значения psy-rd под категорию контента: музыкальный сервис и видеоархив с камер наблюдения хотят радикально разные дефолты – архиву важна высокочастотная деталь (номер машины), музыкальному видео – плавный цвет (сцена и свет). В телемедицине и AR/VR компромиссы снова смещаются: диагностический цвет важен в дерматологическом стриме, периферийная острота – нет. Под всем этим один и тот же приём: знай, на что глаз действительно смотрит, и квантуй вокруг этого знания.

Частая ошибка – отключить психо-визуальные фичи «чтобы посмотреть на чистые цифры»

Инженеры под давлением «дайте цифры» иногда отключают AQ, psy-rd и quantization matrices «для чистого baseline», а затем публикуют битрейты этого baseline как дефолт проекта. Цифры не врут, но это и не те цифры, которые увидит реальный пользователь, потому что любой реальный стриминг-пайплайн идёт с этими фичами включёнными. Baseline, в котором их выключили, описывает выдуманный пессимистичный кодек, который на 10–25% хуже того, что зрители фактически получают, и любая фича, сравниваемая с ним, будет выглядеть лучше, чем есть.

Если бенчмаркинг против «чистого» референса всё-таки нужен – окей, но фиксируйте, какие психо-визуальные фичи включены или выключены, и никогда не сравнивайте «чистый» прогон с «настроенным» без явной маркировки. Внутри это называется feature parity: каждый прогон в сравнении идёт с одинаковым набором психо-визуальных тумблеров, иначе цифры несравнимы.

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

  • Психо-визуальная избыточность – это часть сигнала, которую восприятие зрителя всё равно бы не использовало.
  • Chroma subsampling 4:2:0 выбрасывает 50% данных без видимой цены на натуральном контенте.
  • Quantization matrices тратят больше бит на те пространственные частоты, которые глаз реально различает.
  • Adaptive quantization прячет ошибки в текстурных, тёмных и быстро движущихся областях.
  • psy-rd сдвигает энкодер от «попадать в пиксели» к «попадать в детализацию», теряя PSNR, выигрывая VMAF.
  • Отключить психо-визуальные фичи на бенчмарке – значит описать кодек на 10–25% хуже того, что вы реально отдаёте.

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

Источники

  1. Wallace, G. K. (1992). "The JPEG Still Picture Compression Standard." IEEE Transactions on Consumer Electronics, vol. 38, no. 1. https://ieeexplore.ieee.org/document/125072. Accessed 2026-05-16.
  2. Curcio, C. A. et al. (1990). "Human photoreceptor topography." Journal of Comparative Neurology. https://onlinelibrary.wiley.com/doi/10.1002/cne.902920402. Accessed 2026-05-16.
  3. Poynton, C. (2012). Digital Video and HD: Algorithms and Interfaces (2nd ed.). Morgan Kaufmann.
  4. Mannos, J. L., Sakrison, D. J. (1974). "The Effects of a Visual Fidelity Criterion on the Encoding of Images." IEEE Transactions on Information Theory.
  5. ITU-R BT.709 – Parameter values for the HDTV standards. https://www.itu.int/rec/R-REC-BT.709/. Accessed 2026-05-16.
  6. ITU-T T.81 / ISO 10918-1 – JPEG specification, Annex K Tables K.1 / K.2. https://www.w3.org/Graphics/JPEG/itu-t81.pdf. Accessed 2026-05-16.
  7. Sullivan, G. J., Ohm, J.-R., Han, W.-J., Wiegand, T. (2012). "Overview of the High Efficiency Video Coding (HEVC) Standard." IEEE Transactions on Circuits and Systems for Video Technology, vol. 22, no. 12. https://ieeexplore.ieee.org/document/6316136. Accessed 2026-05-16.
  8. SVT-AV1 – Appendix: Variance-Based Adaptive Quantization. https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/master/Docs/Appendix-Variance-Based-Adaptive-Quantization.md. Accessed 2026-05-16.
  9. x264 manual (Debian) – --aq-mode, --aq-strength. https://manpages.debian.org/experimental/x264/x264.1.en.html. Accessed 2026-05-16.
  10. Adzic, V., Kalva, H., Furht, B. (2013). "Exploring visual temporal masking for video compression." https://www.cse.fau.edu/~hari/files/2028/Adzic%20et%20al_2013_Exploring%20visual%20temporal%20masking%20for%20video%20compression.pdf. Accessed 2026-05-16.
  11. Wang, S., Zeng, K., Rehman, A., Wang, Z. (2017). "Perceptual Evaluation of Psychovisual Rate-Distortion Enhancement in Video Coding." University of Waterloo. https://ece.uwaterloo.ca/~z70wang/publications/HVEI17_PsyRD.pdf. Accessed 2026-05-16.

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

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