Термин
Residual
Разница между предсказанным блоком и настоящим. Именно её трансформируют, квантуют и кодируют entropy.
Residual – разница между тем, как энкодер предсказал блок, и тем, как он реально выглядит. После этапа prediction (intra или inter) энкодер вычитает предсказание из реальных пикселей и получает residual – блок небольших чисел, в основном близких к нулю, представляющий остаток информации, которую prediction не уловило. Residual затем преобразуется (`dct` или подобное), квантуется и entropy-кодируется для хранения. Всё, что находится в реальном bitstream – это либо инструкция prediction (motion vector, intra-режим), либо residual.
Почему residuals важны: они математическая причина, по которой современное видео так хорошо сжимается. Идеальное предсказание оставило бы residual из одних нулей, что entropy-кодируется почти в ничто. Плохое предсказание оставляет residual, по сути информативный как и исходные пиксели, и сжимающийся не лучше входа. Весь энкодер спроектирован так, чтобы делать residuals максимально маленькими и близкими к нулю до того, как они попадут на этап квантизации.
Для продуктовой команды «residual» – это в основном жаргон, который вы услышите в документации энкодера, а не ручка для настройки. Но это полезный язык для диагностики того, где провалилось сжатие. Видимый blocking на плоских областях? Prediction было хорошим, но квантизация слишком агрессивно округлила residual. Видимый призрак или смазывание на движении? Prediction было плохим, и residual оказался слишком большим, чтобы закодировать в имеющемся bitrate. Чёткий текст теряет резкость? Intra-prediction не смогло точно захватить границу, оставив высокочастотный residual, который квантизация испортила. Сопоставление каждого артефакта с «prediction провалилось» или «residual слишком сильно квантовали» делает тюнинг энкодера гораздо более методичным.
Считаете параметры для своего продукта?
Поможем собрать энкодер-леддер и посчитать стоимость доставки – до старта разработки.