Содержание статьи +
- Коротко
- Зачем это нужно
- Что такое артефакт сжатия на самом деле
- Четыре семейства артефактов
- Блочно-трансформное семейство: блочность, рябь, москитный шум, размытие
- Тональное семейство: бандинг
- Цветовое семейство: растекание и субдискретизация
- Временно́е семейство и доставка: джаддер, стуттер, фризы, тайлинг
- Какая метрика ловит какой артефакт – и какой не может
- Решатель: видишь X – причина скорее всего Y – лечится Z
- Где здесь Фора Софт
- Ключевые выводы
- Что почитать дальше
Коротко
Артефакт сжатия – это видимая ошибка, которую сжатие с потерями или доставка добавляют к видео: блок, полоса, ореол, рывок, которых не было в оригинале. Этот справочник – оглавление всей галереи: он раскладывает каждый распространённый артефакт по четырём семействам в зависимости от того, где он рождается (блочно-трансформное кодирование, тональное квантование, обработка цвета и движение или доставка), даёт по одной строке причины для каждого и предлагает решатель «видишь X – причина скорее всего Y – лечится Z». Он же честно называет неудобную правду, к которой этот раздел постоянно возвращается: популярные объективные метрики – PSNR, SSIM и VMAF – слепы к части этих артефактов, поэтому высокому числу нельзя верить как доказательству чистой картинки. Прочитайте это первым, а затем переходите по ссылкам в отдельные глубокие статьи по каждому артефакту за деталями обнаружения и устранения.
Зачем это нужно
Если вы кодируете, стримите или контролируете качество видео, рано или поздно вы упрётесь взглядом в кадр, который выглядит неправильно, и должны будете быстро ответить на два вопроса: что я вижу и что это вызвало. Догадки съедают вечер отладки, а иногда уезжают в релиз. Этот справочник даёт вам именованный словарь для каждого распространённого артефакта, карту «симптом → причина → лечение» и – поскольку это раздел про измерение – честную таблицу того, какая метрика реально ловит каждый из них. Он написан для видеоинженера, лида по кодированию или QA-инженера, который видит, что «что-то не так», но хочет назвать это, измерить и отследить как профессионал. Галерея артефактов, которая следует дальше, – самый «линкабельный» блок этого раздела именно потому, что чистого, размеченного справочника, как этот, в открытом интернете почти нет.
Что такое артефакт сжатия на самом деле
Начнём со слова. Артефакт – это любая видимая структура в картинке, которую не записывала камера и не задумывал режиссёр: это артефакт процесса, а не сцены. Сжатие видео с потерями работает, выбрасывая информацию, которой вы, по ставке кодера, не хватитесь: мелкую деталь, тонкий цвет, точное движение. Чаще всего ставка срабатывает и вы ничего не замечаете. Когда кодер выжимают слишком сильно – слишком мало бит, слишком агрессивная настройка, тяжёлый контент – выброшенная информация оставляет видимый шрам. Этот шрам и есть артефакт.
Полезно представлять сжатие как упаковку чемодана. Сложите вещи аккуратно – они выйдут целыми; сядьте на крышку, чтобы захлопнуть, – и всё выйдет мятым в предсказуемых местах. Артефакты сжатия – это те складки. Они не случайный шум: у каждого свой механизм, своё место появления и свой вид – именно это и делает справочник возможным.
Одно различие сразу, потому что оно меняет тактику охоты. Не каждый артефакт приходит от кодера. Часть рождается раньше – в шумном или уже сжатом источнике. Часть рождается позже, при доставке: обрыв в сети, переключение адаптивного битрейта, баг декодера. Кодеру достаётся за всё, потому что он сидит в середине, но лечение живёт там, где артефакт реально появился. Прослеживание этого пути – задача итоговой статьи о прослеживании артефакта до причины; распознавание артефакта как таковое – задача этой.
Четыре семейства артефактов
Единой официальной таксономии видеоартефактов нет, но исследовательская литература сошлась на устойчивом разделении на пространственные артефакты (ошибки внутри одного кадра) и временны́е (ошибки, заметные только в движении, между кадрами). Классический обзор Yuen и Wu в Signal Processing (1998) каталогизировал пространственный набор – блочность, рябь (ringing), москитный эффект, размытие и растекание цвета – а более поздние перцептивные работы добавили временно́й набор. Для практикующего инженера удобнее сортировать по происхождению, потому что происхождение указывает на лечение. Этот справочник использует четыре семейства.
Первое семейство – блочно-трансформные артефакты. Почти каждый кодек – H.264/AVC, HEVC, AV1 – режет кадр на блоки и сжимает каждый блок дискретным косинусным преобразованием (DCT) – математическим шагом, который представляет блок как сумму паттернов, а затем квантует (округляет) паттерны ради экономии бит. Округлите слишком сильно – и структура блоков проступает: блочность, рябь, москитный шум и размытие – все они из этого единственного механизма.
Второе семейство – артефакты тонального квантования, прежде всего бандинг, он же контуринг (contouring). Они появляются в плавных градиентах (небо, затемнение, студийный фон), когда различимых уровней яркости не хватает, чтобы отрисовать градиент гладко, и он распадается на видимые ступени.
Третье семейство – цветовые артефакты: растекание цвета и ошибки от субдискретизации цветности (chroma subsampling) – стандартной практики хранить цвет с меньшим разрешением, чем яркость. Сильнее всего они бьют по насыщенным краям и цветному тексту.
Четвёртое семейство – временны́е артефакты и артефакты доставки: джаддер, стуттер, мерцание и проблемы на стороне доставки (переключения битрейта, фризы и тайлинг от потери пакетов). Они существуют только в движении или в передаче – и, что важно, покадровые метрики их вообще не видят.
Блочно-трансформное семейство: блочность, рябь, москитный шум, размытие
У этих четырёх один родитель – блочный DCT и его квантователь, – поэтому они ходят вместе и усиливаются вместе по мере падения битрейта.
Блочность (часто называют макроблокинг, macroblocking) – самый узнаваемый артефакт из всех: картинка распадается на видимые квадраты, словно собрана из грубой плитки. Это происходит потому, что кодек обрабатывает кадр на сетке блоков, и при низком битрейте каждый блок квантуется так грубо, что соседние блоки больше не совпадают на общей границе. Сетка реальна и считаема. Разбейте кадр 1920×1080 на трансформные блоки 8×8 – и получите 240 × 135 = 32 400 блоков, то есть 32 400 маленьких границ, где может разойтись видимый шов. Современные кодеки борются с блочностью нормативным внутрицикловым деблокинг-фильтром (in-loop deblocking), определённым внутри стандартов H.264/AVC и HEVC, который сглаживает границы блоков до показа и повторного использования кадра; HEVC добавляет вторую стадию – Sample Adaptive Offset. Если блочность всё ещё видна, у кодера кончились биты, чтобы её спрятать. Полный механизм и поведение метрик – в статье Блочность и сетка DCT.
Рябь (ringing) – рябь или двоение, льнущее к резкому контрастному краю: контур текста, здание на фоне неба. Это хрестоматийный случай явления Гиббса: когда квантователь обрезает высокочастотные DCT-коэффициенты, нужные чёткому краю, восстановленный край идёт с перелётом и осциллирует – как ударенный колокол, который звенит, а не замолкает чисто. Рябь живёт в неподвижном кадре.
Москитный шум – это рябь, которая движется. Поскольку кодер переквантует каждый кадр чуть иначе, рябь вокруг края мерцает и пляшет от кадра к кадру – облако суетливых точек вокруг жёстких краёв, ровно как мошки у фонаря на крыльце. Хуже всего на том контенте, что чаще всего встречается в реальных продуктах: резкий текст, логотипы и компьютерная графика на плоском фоне. Работа NIST по москитному шуму прямо возводит его к процессу квантования блочного DCT. Рябь и москитный шум получают общий глубокий разбор в статье Рябь и москитный шум вокруг краёв.
Размытие – тихий из четвёрки: потеря мелкой детали и текстуры, когда квантователь отбрасывает несущую её высокочастотную информацию или когда видео уменьшили в масштабе и не восстановили. Трава превращается в зелёную мазню, кожа теряет поры, кирпич – раствор. Сложность в том, что размытие не всегда артефакт: малая глубина резкости – это намеренная мягкость, – поэтому навык в том, чтобы отличить творческое решение от провала сжатия, чему посвящена статья Размытие и потеря деталей.
Тональное семейство: бандинг
Протяните плавный градиент – ясное вечернее небо, медленное затемнение, мягко освещённую студийную стену – через достаточно жёсткий энкод, и он перестанет быть плавным. Он распадается на видимые полосы плоского цвета, разделённые резкими ступенями, как топографическая карта. Это бандинг, он же контуринг, и у него точная причина: различимых кодовых значений не хватает, чтобы представить градиент, поэтому многие пиксели округляются к одному значению и образуют плоское плато, а затем перескакивают на следующее.
Вот арифметика, потому что она указывает прямо на лечение. Стандартное 8-битное видео имеет 2^8 = 256 уровней яркости на канал. Допустим, небо плавно идёт от кодового значения 90 к 110 – всего 20 различимых уровней – на 400 пикселях высоты. Это 400 ÷ 20 = 20 пикселей одинаковой яркости, прежде чем значению позволено измениться, поэтому вы видите плоские полосы шириной 20 пикселей с видимой ступенью между каждой. Теперь закодируйте тот же градиент в 10 бит – 2^10 = 1024 уровня, вчетверо больше. Тот же диапазон яркости теперь охватывает около 80 кодовых значений, полосы сжимаются примерно до 400 ÷ 80 = 5 пикселей, и ступени падают ниже порога, на котором глаз их выхватывает. Поэтому стандартные средства от бандинга – это бо́льшая битовая глубина (8 → 10 бит), дизеринг (добавление калиброванного шума, чтобы разбить ступени) и специальные дебандинг-фильтры. Механика битовой глубины со стороны причины живёт в разделе Video Encoding про битовую глубину; сторона измерения – это Бандинг: когда плавные градиенты распадаются на ступени.
Бандинг важен далеко за пределами своего вида из-за того, что он делает с вашими метриками, к чему мы переходим ниже: это артефакт, который популярные числа пропускают полнее всего.
Цветовое семейство: растекание и субдискретизация
Цвет сжимается жёстче яркости – намеренно, потому что глаз куда чувствительнее к яркости (насколько светло), чем к цветности (какой цвет). Кодеки эксплуатируют это субдискретизацией цветности – чаще всего схемой 4:2:0, которая хранит полноразмерную картинку яркости, но цветовую картинку лишь в четверть разрешения. Обычно незаметно. Но на насыщенном контрастном цветовом крае – красный текст на сером фоне, яркий логотип – низкоразрешённый цвет может размазаться за резкий край яркости, внутри которого должен сидеть. Эта размазня и есть растекание цвета: цвет вытекает за свои границы.
Yuen и Wu привязали механизм к обнулению квантователем высокочастотных цветовых коэффициентов, оставляющему только грубую низкочастотную версию цвета, которая не поспевает за резким краем. Насыщенные красные и цветной текст в скринкастах и презентациях – там, где это проявляется. Разбор распознавания и измерения – это Цветовые артефакты: растекание, сдвиг и субдискретизация; механика цветовых пространств и субдискретизации со стороны кодирования принадлежит статье Video Encoding про цветовые пространства.
Временно́е семейство и доставка: джаддер, стуттер, фризы, тайлинг
Последнее семейство существует только в движении, и именно его стандартные метрики структурно не способны увидеть.
Джаддер – неровное движение: медленная панорама камеры, которая должна скользить, вместо этого дёргается в повторяющемся сбое. Классическая причина – преобразование частоты кадров: показ 24-кадрового кино на 60-герцовом экране вынуждает 3:2 pulldown (он же телесин, telecine), который показывает один кадрик плёнки три обновления экрана, а следующий – два. Этот ритм 3-2-3-2 неровен, и на ровной панораме глаз читает неровность как рывок. Стуттер (stutter) в строгом смысле – другое: он от кадров, что приходят с опозданием или теряются, поэтому движение, которое должно быть непрерывным, прыгает. Оба временны́е; ни один не меняет вид отдельного кадра.
Артефакты со стороны доставки дополняют семейство: переключение адаптивного битрейта (ABR), которое посреди потока падает на качество ниже и на пару секунд делает картинку мягче; фриз, когда картинка замирает, пока плеер добуферивает; и тайлинг или искажение, когда потерянные сетевые пакеты оставляют смазанные блоки или наполовину обновлённый кадр. Кодер не вызывал ни одного из них – это сделали сеть и плеер, – поэтому им посвящена отдельная статья Артефакты стриминга, которая ведёт вперёд к блоку про опыт стриминга. Сами джаддер и стуттер разобраны в статье Джаддер, дёрганье и артефакты частоты кадров.
Какая метрика ловит какой артефакт – и какой не может
Это та часть, которую маркетинговая страница вам никогда не расскажет, и это вся причина, почему галерею артефактов держит раздел про измерение. Метрика качества полезна лишь для того артефакта, который реально способна обнаружить. У трёх популярных full-reference метрик – PSNR (Peak Signal-to-Noise Ratio, сырая пиксельная ошибка в децибелах), SSIM (Structural Similarity, структурное совпадение 0–1) и VMAF (Video Multimethod Assessment Fusion, обученное на восприятии число Netflix 0–100) – у каждой есть жёсткие слепые зоны.
Блочность и размытие лежат прямо в том, что эти метрики измеряют, так что их они ловят прилично. Рябь и растекание цвета ловятся слабо – ошибка мала в пиксельном выражении, но видима глазу. Бандинг – худший случай: собственная документация Netflix прямо говорит, что PSNR, SSIM и VMAF не предназначены для обнаружения бандинга, – именно поэтому Netflix построил отдельный детектор CAMBI (Contrast-Aware Multiscale Banding Index) и позже встроил его в VMAF. А всё временно́е семейство – джаддер, стуттер, мерцание – невидимо всем трём по структурной причине: PSNR, SSIM и VMAF считаются покадрово и затем усредняются, поэтому артефакт, живущий в тайминге между кадрами, в расчёт вообще не попадает.
| Артефакт | Как выглядит | Откуда рождается | Метрика, что ловит / слепая зона |
|---|---|---|---|
| Блочность | Видимые квадратные плитки | Грубое квантование DCT на сетке блоков | PSNR / SSIM / VMAF ловят хорошо |
| Рябь | Рябь, льнущая к резким краям | Обрезанные высокочастотные коэффициенты (Гиббс) | Ловится слабо; мала в пикселях, видна глазу |
| Москитный шум | Мерцающие точки у краёв, в движении | Покадровая вариация ряби | Покадровые метрики не видят движения; нужен временно́й контроль |
| Размытие | Потеря текстуры и мелкой детали | Высокие частоты сквантованы; даунскейл | SSIM / VMAF ловят; трудно отличить от намеренной мягкости |
| Бандинг | Полосы поперёк плавного градиента | Слишком мало кодовых значений; низкая битовая глубина | Слепая зона – PSNR/SSIM/VMAF пропускают; нужен CAMBI |
| Растекание цвета | Цвет вытекает за свой край | Грубое квантование цветности; 4:2:0 | Слабо – метрики, нацеленные на яркость, недооценивают цвет |
| Джаддер / стуттер | Дёргающееся или прыгающее движение | 3:2 pulldown; потерянные/опоздавшие кадры | Слепая зона – покадровые метрики не видят тайминг |
| Фриз / тайлинг | Замёрзшая или смазанная картинка | Добуферизация; потеря сетевых пакетов | Вне области метрик картинки; нужна QoE-телеметрия |
Таблица 1. Справочник в одной таблице: каждый распространённый артефакт, его подпись, причина и честная правда о том, какая метрика его ловит или нет. Спаривайте каждую метрику со слепой зоной для контента перед вами.
«Частая ошибка: верить зелёному дашборду больше, чем своим глазам. Самая дорогая ошибка во всей этой теме – заключить «VMAF 95, значит картинка чистая». VMAF 95 может сидеть поверх явного бандинга в небе, растекания цвета на логотипе и джаддера на каждой панораме – потому что ничего из этого в число не входит. Когда контент склонен к артефакту из слепой зоны (плавные градиенты, насыщенный текст, медленные панорамы), добавьте правильный детектор – CAMBI для бандинга, временно́й контроль для джаддера – и подтвердите трудные кадры глазом. Метрика – это прокси с областью применения, а не справка о здоровье. Полный каталог этих провалов – Где врут объективные метрики.»
Решатель: видишь X – причина скорее всего Y – лечится Z
Когда артефакт проявился, отрабатывайте симптом в обратную сторону. Поток ниже – быстрая версия; статья о прослеживании – обстоятельная.
Если видите видимые квадраты – это блочность; причина – слишком низкий битрейт или слишком агрессивный квантователь, а лечение – больше бит, лучший пресет кодера или более сильный деблокинг. Если видите полосы в плавном небе или затемнении – это бандинг; причина – недостаточная битовая глубина или квантование плоской области, а лечение – 10-битный энкод, дизеринг или дебандинг-фильтр. Если видите ореолы или мерцание вокруг текста и краёв – это рябь или москитный шум; причина – обрезка высоких частот, а лечение – больше бит, более лёгкая предварительная резкость или проход денойза перед энкодом. Если видите кашу там, где должна быть текстура – это размытие; убедитесь, что оно не намеренное, затем поднимите битрейт или проверьте цепочку масштабирования. Если видите цвет, размазанный за край – это растекание цвета; причина – квантование или субдискретизация цветности, а лечение – более качественная настройка цветности или 4:2:2 для критичной работы. Если движение дёргается на панораме – подозревайте джаддер от рассинхрона частоты кадров; если оно прыгает или замирает – подозревайте потерянные кадры или добуферизацию на стороне доставки, а вовсе не кодер.
Где здесь Фора Софт
Фора Софт делает видеософт с 2005 года – стриминг, WebRTC-конференции, OTT, e-learning, телемедицину и видеонаблюдение, – и каждый из этих продуктов отгружает кадры, которым надо пережить кодер и сеть. Распознать артефакт и проследить его до стадии, что его вызвала, – наша ежедневная работа: жалоба на бандинг в телемедицинском потоке – это вопрос битовой глубины и препроцессинга, а жалоба на тайлинг в прямой трансляции – вопрос потери пакетов, и эти два лечатся в совершенно разных местах. Мы относимся к галерее артефактов как к диагностическому инструменту, в паре с правильным детектором для каждой слепой зоны, потому что один дашборд метрик тихо пропустит несколько артефактов из этого справочника. Где это помогает решению, мы указываем на наши собственные данные бенчмарков, чтобы вы могли проверить метод, а не верить на слово.
Ключевые выводы
- Артефакт – это видимая ошибка, добавленная процессом; у каждого своя причина и вид.
- Четыре семейства: блочно-трансформные, тональные (бандинг), цветовые, временны́е/доставки.
- Блочность, рябь, москитный шум и размытие – все из квантования блочного DCT.
- Бандинг – от нехватки кодовых значений; лечится 10 бит, дизерингом или дебандингом.
- PSNR, SSIM и VMAF слепы к бандингу и ко всем временны́м артефактам.
- Работайте «симптом → причина → лечение» и добавляйте детектор на каждую слепую зону.