Содержание статьи +
- TL;DR
- Зачем это нужно
- Три идеи в одной картинке
- Пласт первый – Теория информации: математический пол (1948–1959)
- Пласт второй – Prediction: не отправляй то, что декодер может угадать (1969–1981)
- Пласт третий – Transform: перепакуй пиксели так, чтобы большую часть можно было выбросить (1947–1974)
- Как это собирается вместе: hybrid block-based pipeline
- Частая ошибка: путать три пласта
- Современный фронт: нейронные кодеки – это четвёртый пласт?
- Где здесь Фора Софт
- Главное
- Что читать дальше
- Источники
TL;DR
Каждый современный видеокодек – H.264, HEVC, AV1, VVC, готовящийся к выходу в 2026 году AV2 – стоит на трёх научных прорывах, которые случились между 1948 и 1981 годами. Теория информации Клода Шеннона показала инженерам, что у размера файла есть жёсткий математический предел, и дала entropy и rate–distortion как два мерила прогресса. Prediction – сначала conditional replenishment в 1969 году, потом block-based motion compensation в 1981-м – позволил описывать новый кадр как небольшую правку к тому, что декодер уже видел. Discrete cosine transform, опубликованный Ahmed, Natarajan и Rao в 1974 году, перепаковывает блок пикселей в список частотных коэффициентов, где человеческий глаз позволяет выбросить большинство значений. Сорок с лишним лет эволюции кодеков – это история того, как эти три идеи становились всё точнее, глубже и программируемее. И ровно те же три идеи нейронные кодеки 2026 года пытаются учить из данных, а не проектировать вручную.
Зачем это нужно
Если вы финансируете, ведёте или продаёте что-либо, связанное с видео – стриминговый сервис, видеоконференцсвязь, surveillance, OTT-приложение – вы каждый день платите за битрейт. Каждый мегабит, сэкономленный на потоке, возвращается экономией на CDN, на хранении, на мобильном трафике, на батарее устройства пользователя. Уровень сжатия зависит от трёх научных идей, которые отрасль шлифует с 1940-х годов, и инженеры будут ссылаться на них в любой встрече про кодеки, в которой вы окажетесь. После этой статьи вы будете понимать, что измеряет entropy, почему «prediction» – одно слово, за которым скрыты десятилетия исследований, почему DCT встречается почти в каждом видео и фото, которое вы видели, и почему нейросети – это сейчас следующая глава той же истории. Никаких предварительных знаний не нужно. Мы объясняем каждый термин простым языком до того, как его использовать, и проговариваем математику вслух при первом появлении.
Три идеи в одной картинке
До истории – карта. Каждый современный видеокодек складывает три большие идеи в одном и том же порядке.
Первый пласт, теория информации, – это свод правил. Он говорит энкодеру, насколько маленьким в принципе можно сделать файл при заданном уровне допустимого ущерба для картинки. Без теории информации инженер не может сказать, действительно ли новый кодек умнее или просто сэкономил битрейт за счёт чего-то ещё. С ней любая метрика – бит на пиксель, BD-rate, VMAF при фиксированном битрейте – имеет смысл.
Второй пласт, prediction, – это приём, при котором кусок видео описывается как небольшая правка к чему-то, что декодер уже знает. Уже знает – ключевая фраза. Декодер может знать соседний слева пиксель (intra-frame prediction), тот же блок, каким он был в предыдущем кадре (inter-frame prediction), или взвешенное среднее блока из двух окружающих кадров (B-frame prediction). Каждый успешный видеокодек, начиная с H.261 в 1988 году, ставит prediction первым, потому что кадры реального видео почти никогда не независимы.
Третий пласт, transform, – это приём, при котором блок пикселей (точнее, блок ошибок prediction) переписывается как список частотных чисел. Большинство этих чисел оказываются маленькими или нулевыми, а к маленьким ошибкам в остальных глаз снисходителен. Выбрасываем маленькие через quantization, дожимаем оставшиеся через entropy coding – и у вас готова задняя половина рабочего видеокодека.
Остаток статьи разбирает, как каждый пласт был открыт, что он на самом деле делает, и куда направляется поле дальше.
Пласт первый – Теория информации: математический пол (1948–1959)
В октябре 1948 года инженер Bell Labs по имени Claude Elwood Shannon опубликовал в двух частях Bell System Technical Journal статью под названием A Mathematical Theory of Communication. 1 Статья изобрела целое поле – теорию информации – и дала всем, кто пришёл после, язык, на котором мы до сих пор обсуждаем сжатие. Два её результата важны для видео:
- Source coding theorem. У каждого источника сообщений – текста, аудио, пикселей – есть жёсткий нижний предел числа бит, нужных для кодирования без потерь. Этот предел называется entropy источника, обозначается H и измеряется в битах на символ. Шеннон доказал, что подойти к H можно сколь угодно близко, но опуститься ниже – нельзя.
- Rate–distortion theory. Если вы готовы принять D единиц ущерба исходному сигналу, можно сжимать лучше, чем lossless-предел. Конкретно: существует функция R(D) – rate–distortion function – задающая минимальный битрейт при заданном уровне искажений. Шеннон набросал её в 1948 году и формализовал в 1959-м. 2
Разберём оба простым языком – на них держится остаток статьи.
Entropy в одном абзаце (и математика вслух)
Entropy – это мера удивления. Если символ всегда несёт одно и то же значение (монета, всегда падающая орлом), он не несёт информации, и его entropy = 0 бит. Если у него много равновероятных значений (честный 256-гранный кубик), он несёт много, и entropy высокая. Формула Шеннона для источника, выдающего символ i с вероятностью pᵢ:
«H = − Σᵢ pᵢ × log₂(pᵢ) бит на символ.»
Честная монета: H = −(0.5 × log₂ 0.5 + 0.5 × log₂ 0.5) = −(−0.5 − 0.5) = 1 бит на бросок. Монета, падающая орлом в 99% случаев: H = −(0.99 × log₂ 0.99 + 0.01 × log₂ 0.01) ≈ 0.081 бит на бросок. Смещённая монета сжимается в двенадцать раз лучше честной, потому что она в двенадцать раз менее удивительна.
Значения пикселей реального видео – это не честные монеты. Пиксель рядом с этим почти наверняка похож по значению. Блок, на который вы сейчас смотрите, почти наверняка похож на тот же блок в предыдущем кадре. Оба факта делают entropy видео заметно ниже, чем подсказывает сырой пиксельный счёт, и именно в этом зазоре живёт всякий компрессор.
Rate–distortion в одном абзаце
Для lossy-сжатия – а именно так работает любой видеокодек – второй подарок Шеннона называется rate–distortion theory. Зафиксируйте метрику искажений (классический пример – mean squared error, современные – SSIM и VMAF) и допустимый уровень D. Тогда функция R(D) – минимальный битрейт, при котором средние искажения не превышают D. Кривая R(D) монотонно убывает: больше ущерба – меньше бит. Любой реальный кодек живёт где-то выше своей теоретической rate–distortion-кривой; разрыв между «где мы сейчас» и «где Шеннон разрешает быть» – это запас для следующего поколения.
Почему это изменило кодирование видео
Теория информации дала отрасли три вещи, которых не было до 1948 года:
- Способ определить приз: минимальный возможный размер файла. Без entropy любое «мы сжали лучше» оставалось мнением.
- Способ оценивать работу: и бит на пиксель, и BD-rate (delta-rate по Bjøntegaard – площадь между двумя rate-distortion-кривыми) выходят прямо из rate–distortion-теории.
- Способ выбирать, что делать дальше: чем выше текущий кодек висит над своим теоретическим полом, тем больше места следующему поколению. Как мы обсудим ниже, разрыв сильно сократился, и вопрос «насколько близко мы уже к полу» – центральный для кодеков в 2026 году.
Связь от Шеннона к битстриму проходит через служебный слой под названием entropy coding – Huffman (1952), arithmetic coding (1976–1981) и Context-Adaptive Binary Arithmetic Coding или CABAC (2003). Этот слой разбираем подробно в статье Entropy coding: краткое введение (Huffman, arithmetic, CABAC). Здесь главное: entropy coding – последний шаг, который реально превращает поток чисел в минимально возможную строку битов. Всё остальное в кодеке – подготовка к этому шагу.
Пласт второй – Prediction: не отправляй то, что декодер может угадать (1969–1981)
Второй прорыв проще всего сформулировать и труднее всего сделать хорошо. Prediction – это приём описания нового куска видео как небольшой правки к чему-то, что у декодера уже есть. Чем хуже prediction, тем больше бит уходит на правку. Вся игра в том, чтобы предсказывать как можно точнее, чтобы правка (называется residual) была как можно ближе к нулю.
От отправки пикселей к отправке разностей (1952–1969)
До prediction каждый пиксель отправлялся как число от 0 до 255. Учебниковый приём 1952 года – differential pulse-code modulation (DPCM): вместо самого пикселя отправлять разность между ним и prediction-значением, построенным по соседям сверху и слева. В гладкой области изображения эти разности маленькие и сгруппированы вокруг нуля, поэтому сжимаются лучше. DPCM был первым коммерчески успешным predictive coder и десятилетиями двигал ранние still-image форматы.
Первый по-настоящему интересный prediction в видео появился в 1969 году, когда F. W. Mounts в Bell Labs предложил conditional replenishment. 3 Идея: большинство пикселей в типичном кадре не изменились с предыдущего кадра, поэтому их не нужно отправлять вообще. По каждому блоку энкодер принимает бинарное решение – «изменился» или «не изменился». Неизменившиеся блоки пропускаются полностью; декодер просто оставляет их в прежнем значении. Изменившиеся отправляются. Это первое явное использование temporal redundancy в видео, и экономия битов на типичной talking-head съёмке была драматической.
Слабость conditional replenishment тоже очевидна: если камера или субъект хоть как-то двигаются, почти каждый блок становится «изменившимся», и сжатие схлопывается. Чтобы справляться с движением, нужно что-то поумнее.
Motion compensation (1969–1981)
Что-то поумнее пришло в три волны.
Волна один – pel-recursive motion estimation. В 1970-е A. N. Netravali и J. D. Robbins в Bell Labs научились оценивать displacement (смещение) каждого пикселя от кадра к кадру и затем использовать смещённый пиксель прошлого кадра как prediction для текущего. 4 Их статья 1979 года «Motion-Compensated Television Coding» показала, что motion compensation может примерно вдвое уронить битрейт против чистого conditional replenishment, и закрепила за приёмом название motion-compensated prediction, которым мы пользуемся до сих пор.
Волна два – block matching. В 1981 году J. R. Jain и A. K. Jain опубликовали «Displacement Measurement and Its Application in Interframe Image Coding» в IEEE Transactions on Communications. 5 Вместо оценки отдельного displacement для каждого пикселя они разрезали кадр на маленькие прямоугольники (обычно 16 × 16 пикселей) и искали единственный лучший displacement для каждого целого блока в окне поиска по предыдущему кадру. Этот displacement называется motion vector. «Лучшим совпадением» считается тот кандидат в окне поиска, у которого минимальная sum of absolute differences с текущим блоком. В том же году T. Koga с коллегами независимо описал по сути тот же алгоритм. Block-matching motion estimation – это архитектура, которой пользуется любой стандартный кодек, начиная с H.261 (1988).
Причина, по которой block matching победил, – инженерия, а не математика. Pel-recursive-оценщик в принципе может дать более точное поле смещений, но его пришлось бы запускать и на декодере, что дорого. С block matching энкодер делает всю работу по поиску, отправляет найденные маленькие motion vectors, а декодер выполняет дешёвую часть – копирует регион 16×16 из предыдущего кадра по подсказанному displacement. Асимметрия «пусть энкодер пашет, лишь бы декодеру было легко», которую отрасль так и называет, заложена именно тогда и с тех пор не сдвинулась.
Волна три – sub-pixel-точность и B-frames. Быстро добавились два уточнения. Sub-pixel motion vectors (half-pel в H.261, quarter-pel в MPEG-4 ASP и H.264, до 1/8-pel в некоторых режимах VVC) позволяют энкодеру описать движение, не попадающее в целочисленную пиксельную сетку, через интерполяцию между соседними пикселями reference-кадра. Bidirectional prediction (буква B в B-frames) позволяет предсказывать блок как взвешенную смесь одного прошлого и одного будущего кадра, что особенно сильно работает при кратковременных перекрытиях и плавных фейдах. B-frames мы разбираем подробно в GOP-структура: I, P, B-кадры, open vs closed GOP; здесь главное: удачный B-frame стоит примерно на 30–40% меньше бит, чем эквивалентный P-frame.
Intra prediction: предсказание из того же кадра, а не из предыдущего
Поздним, но важным дополнением стал intra-frame prediction. У первого кадра видео или у первого кадра новой сцены нет предыдущего кадра, из которого можно предсказывать. Первое поколение кодеков просто трансформировало каждый такой блок «как есть». H.264 в 2003 году добавил важную идею: даже внутри одного кадра блок, который вы вот-вот закодируете, почти наверняка похож на пиксели вдоль его верхнего и левого края, потому что они уже декодированы и доступны. Значит, можно предсказать текущий блок 4 × 4 или 8 × 8 как направленную копию этих соседей – вниз, по диагонали, по горизонтали и так далее – и кодировать только residual.
H.264 предлагал 9 intra-режимов на блок 4×4. HEVC поднял до 35 направлений на блок, у AV1 – 56 направленных режимов плюс несколько ненаправленных, у развивающегося драфта AV2 – около 80. Каждое новое поколение тратит кремний и время энкодера на лучший prediction, потому что каждый дополнительный режим – это меньше residual-бит.
Почему prediction так важен
Для среднего видео residual – разность между кадром и лучшей prediction-догадкой энкодера – имеет entropy примерно на порядок ниже, чем entropy сырых пикселей. Это значит, что остальная часть кодека (transform, quantization, entropy coding) работает уже на сигнале, который в 10 раз меньше по информационному содержанию, чем исходный кадр. Всё остальное в энкодере лишь усиливает то, что уже сделал prediction.
Поэтому каждое поколение каждого кодека тратит большую часть новых транзисторов и страниц стандарта на prediction. Intra prediction в H.264 был большим шагом по сравнению с MPEG-4 ASP. Расширенные направленные intra-режимы и более крупные inter-блоки HEVC дали ему большую часть тех самых 50% экономии. Compound prediction в AV1 (смесь двух motion-compensated reference-блоков с масками и wedge-границами) – один из крупнейших источников его выигрыша. Нейронные видеокодеки 2026 года – вроде семейства DCVC от ByteDance и NVRC от Disney – явно строят свою архитектуру как «учим prediction первым, потом учим сжатие residual», потому что та же логика по-прежнему работает.
Пласт третий – Transform: перепакуй пиксели так, чтобы большую часть можно было выбросить (1947–1974)
Третий пласт – transform. Идея: взять маленький блок чисел (после prediction это residual – ошибка предсказания) и переписать его как другой список чисел, такой, чтобы большинство новых значений были близки к нулю, а немногие крупные несли почти всю «энергию» исходного блока. Затем quantize-нуть маленькие, и вы сбросили биты, не сбросив видимого содержания.
KLT: теоретически оптимален, практически непригоден (1947)
Математика для этой идеи пришла из статистики 1940-х в виде Karhunen–Loève transform (KLT, иногда называется Hotelling transform или просто principal component analysis). Для заданного источника – скажем, блока пикселей 4 × 4 – KLT единственное преобразование, которое полностью декоррелирует блок и сжимает максимум энергии в минимум коэффициентов. В информационно-теоретическом смысле KLT – оптимальное преобразование для любого гауссовского источника. 6
Звучит как конец истории. Это не так. У KLT три проблемы, держащие его вне любого реального кодека уже восемьдесят лет:
- Он data-dependent. Базисные векторы KLT – собственные векторы ковариационной матрицы источника. Меняется статистика источника – нужен другой KLT. Либо базис отправляется с каждым блоком (большой overhead), либо кодек договаривается о фиксированном базисе заранее – и тогда трансформ перестаёт быть оптимальным для конкретного блока.
- Нет быстрого алгоритма. KLT на блоке N×N стоит O(N³) и не имеет эксплуатируемой структуры. Сравните с DCT, который на блоке N×N стоит O(N² log N) благодаря быстрому алгоритму, структурно похожему на FFT.
- Даже на своём домене – Markov-источниках первого порядка – асимптотический выигрыш над DCT крошечный. DCT подходит к KLT в доли децибела для image-like источников, и разрыв сужается ещё сильнее при добавлении quantization noise. 7
За всю историю стандартного видеокодирования KLT был benchmark-ом для сравнения, а не реально отгружаемым трансформом. Тем, что поехал в продакшен, оказался куда более дружелюбный близкий родственник.
DCT (1974): рабочая лошадка, которая съела мир
В январе 1974 года в IEEE Transactions on Computers вышла трёхстраничная статья Nasir Ahmed, Tarald Natarajan и K. Ramamohan Rao под названием Discrete Cosine Transform. 8 Ahmed думал о задаче с 1972 года; практический алгоритм был доведён до ума с Natarajan и Rao в Техасском университете в Арлингтоне. Статья ввела то, что сейчас называется DCT-II, обратный DCT-III и integer-friendly fast-алгоритм, благодаря которому всё семейство стало вычислимо в реальном времени на железе тех лет.
DCT делает с image-блоками то же, что Fourier transform – со временными сигналами: переписывает блок как взвешенную сумму косинусоид разных пространственных частот. Первый коэффициент (DC-коэффициент, по аналогии с электротехникой) – средняя яркость блока. Остальные 63 коэффициента в блоке 8 × 8 описывают волны более высоких частот – сначала линейные градиенты, потом мелкую фактуру, потом очень мелкую фактуру в правом нижнем углу.
Для натуральных изображений сразу полезны три вещи:
- Энергетическая компактность. Реальные фотоблоки в среднем гладкие, поэтому почти вся энергия садится в верхне-левую горстку коэффициентов. Нижне-правые обычно крошечные.
- Декорреляция. DCT-коэффициенты natural-image блока почти статистически независимы. Это значит, что quantization noise распределяется чисто, а не коррелирует с исходным сигналом неприятным образом.
- Перцептуальное соответствие. Зрение куда чувствительнее к низким частотам (медленные перепады яркости на большой площади), чем к высоким (фактура). Поэтому high-frequency DCT-коэффициенты можно quantize-нуть сильно жёстче, чем low-frequency, и глаз большую часть ущерба не заметит. Знаменитые quantization-таблицы JPEG ровно эту перцептуальную асимметрию и кодируют.
DCT впервые появляется в кодировании неподвижных изображений (JPEG, финализирован в 1992 году 9), а затем в каждом видеокодеке, начиная с H.261 (1988). Это с большим отрывом самый широко развёрнутый signal-processing transform в истории.
Дети DCT: integer-трансформы, ADST, семейство AV2
Современные кодеки не используют точный DCT из статьи 1974 года. Они используют integer-приближения к нему, подогнанные под размерную сетку coding unit самого кодека. Три причины:
- Integer-трансформы строго обратимы. Оригинальный DCT использует иррациональные значения косинусов; round-trip floating-point арифметика может вносить крошечные расхождения между энкодером и декодером. Integer-приближения это исключают, что критично, когда множеству декодеров нужно битно-идентично воспроизвести один и тот же поток.
- Они быстрее на любом CPU. Integer-умножения дешёвые, особенно на SIMD- и матричных блоках, на которых живёт codec hardware.
- Их можно сопроектировать с остальными инструментами кодека – например, выровнять базисные векторы трансформа с направлениями intra-prediction режимов.
H.264 ввёл первый integer DCT – дизайн 4 × 4. HEVC добавил integer DCT и DST (Discrete Sine Transform) варианты в размерах 4, 8, 16 и 32. AV1 ввёл целое семейство трансформов: помимо DCT, кодер может использовать ADST (Asymmetric DST), FLIPADST (перевёрнутый вариант для residual, у которых энергия концентрируется внизу блока) и IDTX (identity transform – полезен, когда residual уже sparse). Энкодер выбирает лучший трансформ по блоку через rate–distortion optimization. VVC и развивающийся AV2 добавляют ещё больше вариантов трансформов и более крупные размеры блоков.
KLT по-прежнему служит асимптотическим потолком, с которым всё это сравнивают. Через 46 лет после статьи Ahmed–Natarajan–Rao DCT и его близкие родственники по-прежнему сидят в долях децибела от потолка при крошечной доле вычислительной стоимости. Именно поэтому DCT – в фольклоре кодирования – самая долгоиграющая инженерная сделка в signal processing.
Как это собирается вместе: hybrid block-based pipeline
Сложите три прорыва друг на друга в правильном порядке – и получится hybrid block-based architecture, которой пользуется каждый стандартный кодек, начиная с H.261. Энкодер прогоняет шаги в одном порядке; декодер – в обратном, чтобы собрать картинку обратно.
В одном абзаце: энкодер берёт блок пикселей, предсказывает его по соседним пикселям или предыдущему кадру, считает residual (ошибку prediction), трансформирует residual в частотные коэффициенты, квантует их (единственный шаг, теряющий информацию) и энтропийно кодирует результат в минимально возможную строку бит. Энкодер также локально прогоняет обратные три шага, чтобы получить ту же картинку, которую увидит декодер, и использовать её как reference для prediction следующего блока. In-loop filter (deblocking, SAO, ALF, CDEF – названия меняются от кодека к кодеку) чистит реконструкцию до того, как она попадёт в reference frame buffer. Архитектуру разбираем подробнее в Архитектура гибридного видеокодека.
Hybrid-архитектура не менялась с 1988 года. Стрелки не сдвинулись. В каждом новом поколении менялось содержимое блоков: всё более крупные и адаптивные блоки, всё больше prediction-режимов, всё больше вариантов трансформа, всё более умные квантователи и entropy-кодеры. Каждое изменение приносило несколько процентов экономии битрейта. Сорок лет таких процентов и складываются в порядковую разницу между MPEG-1 и AV1.
Четвёртая опора, на которой всё держится: rate-distortion optimization
Есть ещё одна идея, которая не вполне «прорыв» сама по себе, но заслуживает абзаца здесь, потому что именно она позволяет остальным трём реально доставлять выигрыш в живом энкодере.
Типичный 4K-блок в кодеке 2026 года имеет сотни возможных комбинаций coding mode: какой prediction-режим, какой трансформ, какой шаг квантования, какая разбивка, какой reference frame. Энкодер не может выбрать наугад. Он выбирает комбинацию, минимизирующую Lagrangian cost вида:
«J = D + λ × R»
где D – distortion (обычно sum of squared differences между оригиналом и реконструкцией), R – число бит, которые потратит кандидат, а λ (лямбда) – настроечная ручка, переводящая качество в биты. Этот rate–distortion optimization механизм был формализован для видео Gary Sullivan и Thomas Wiegand в конце 1990-х и был центральным проектным паттерном энкодера H.264. 10 Он по-прежнему живёт внутри каждого современного reference-энкодера (libaom AV1 encoder, VVC test model VTM, семейство x264 / x265 / SVT-AV1). Объясняем с нуля в Mode decision и rate-distortion optimization (RDO).
Связь обратно с Шенноном – прямая. J = D + λR – это Lagrangian dual к Шенноновской кривой R(D). RDO – это практический алгоритм, который заставляет реальный энкодер работать как можно ближе к rate–distortion-границе на доступном ему меню режимов.
Частая ошибка: путать три пласта
Паттерн, который мы часто видим в обзорах и презентациях вендоров, – приписывать одному пласту выигрыш, который на самом деле пришёл от другого. Несколько примеров, на которые стоит обращать внимание:
- «AV1 эффективнее за счёт новых трансформов». Меню трансформов у AV1 шире, чем у H.264, но большая часть его 30% экономии битрейта против H.264 пришла от более богатого prediction (больше intra-режимов, compound inter prediction, более крупные блоки) и от RDO-driven партиционирования. На трансформы как таковые приходится однозначные проценты выигрыша.
- «HEVC экономит биты благодаря лучшему entropy coding». CABAC у HEVC слегка улучшен по сравнению с H.264, но большая часть 50% экономии HEVC пришла от более крупных Coding Tree Units (до 64 × 64), от большего числа направленных intra-режимов и от улучшенной сигнализации motion-vectors. На entropy coding приходится 5–10% от заявленной цифры.
- «Нейронные кодеки выигрывают за счёт ML в entropy coding». Некоторые – да: DCVC-варианты от ByteDance действительно используют learned hyperprior-модель для предсказания распределения латентов. Но куда больший выигрыш в нейронных кодеках 2025–2026 годов пришёл от learned prediction, фактически заменяющей и motion estimation, и трансформ единой learned encoder-decoder сетью. Информационно-теоретический бэкбон при этом не изменился.
Когда читаете codec-анонс, мысленно проверьте, какому из трёх пластов приписан выигрыш, и спросите себя, насколько такое приписывание правдоподобно. Вендор, который не разделяет пласты, – это вендор, который, скорее всего, не измерял их по отдельности.
Современный фронт: нейронные кодеки – это четвёртый пласт?
Три описанных пласта спроектированы руками. Базисные векторы DCT записаны людьми. Набор intra-режимов перечислен комитетом. Форма entropy-модели зафиксирована в стандарте. У энкодера есть свобода выбирать по предложенному стандартом меню, но само меню фиксировано.
End-to-end нейронные видеокодеки, публикуемые с 2018 года, пытаются эту фиксацию снять. Энкодер – это свёрточная или transformer-based нейросеть, принимающая на вход сырые кадры и выдающая небольшой набор латентов – выученных сжатых представлений. Декодер – другая нейросеть, обращающая энкодер и выдающая реконструированный кадр. Пара тренируется минимизировать rate–distortion-loss ровно Лагранжевой формы J = D + λR – Шенноновская кривая, со всеми тремя пластами, выученными из данных, а не спроектированными руками. 11
К концу 2024 года семейство DCVC (Deep Contextual Video Compression, изначально из Microsoft Research Asia) стало первым learned-кодеком, обогнавшим H.266 / VVC на стандартных тестовых последовательностях по PSNR. 12 К 2025 году generative neural codecs на базе diffusion-моделей вроде GNVC-VD от ByteDance показывали сильные перцептуальные победы на крайне низких битрейтах (ниже 0.01 бита на пиксель) при decode-сложности, которая всё ещё на несколько порядков выше, чем у VVC. NVRC (Neural Video Representation Compression) – INR-подход, опубликованный в 2024 году, – отчитался о 23% BD-rate выигрыша над reference-энкодером VVC на датасете UVG. 13
Станет ли end-to-end neural codec по-настоящему четвёртым пластом – зависит от ответа на один инженерный вопрос: способен ли декодер уложиться в энергобюджет и память смартфона или smart-TV? Сегодня ответ – нет: даже самые маленькие нейронные декодеры требуют миллиарды FLOPs на кадр, тогда как hardware AV1 decoder обходится сотнями миллионов. Гибрид + нейросеть (использовать нейросеть только на одном этапе классического кодека – например, эксперименты AOMedia с CNN-based in-loop filter для AV2) – более вероятный первый коммерческий путь. Отслеживаем эту гонку в Будущее: AV2, neural codecs, end-to-end learned compression.
Безопасное операционное предположение на ближайшие три года для всех, кто планирует инфраструктуру: три классических пласта никуда не денутся, hardware-декодеры под AV1 и AV2 останутся вашими delivery-кодеками, а нейронное сжатие будет появляться как quality enhancement layer (super-resolution, denoising, frame interpolation) поверх гибридного потока, а не как замена ему. Cheat sheet внизу статьи раскладывает milestones, за которыми стоит следить.
Где здесь Фора Софт
Фора Софт поставила 239 production-систем видео с 2005 года в видеоконференцсвязи, OTT и IPTV, video streaming, video surveillance, e-learning, телемедицине и AR/VR. В каждом таком проекте выбор кодека – и, стало быть, выбор того, на какой из научных прорывов мы налегаем сильнее всего, – формирует архитектуру. На low-latency WebRTC мы жертвуем эффективностью трансформа ради низкой сложности декодера и коротких GOP-ов. На high-volume OTT – наоборот, играем на лучшем prediction HEVC и AV1 ценой более крупных encoder farms. На surveillance тот самый prediction, который идеально сжимает спортивную съёмку, заодно позволяет вести motion-triggered storage в доле битрейта непрерывной записи. Три пласта – не абстракция. Это рычаги, которые мы крутим всякий раз, когда специфицируем стриминговый или видеопродукт под клиента.
Главное
- Современные видеокодеки стоят на трёх прорывах: теория информации Шеннона (1948), motion-compensated prediction (1969–1981) и discrete cosine transform (1974).
- Теория информации – это свод правил: задаёт минимальный возможный размер файла и кривую R(D), за которой гонится любой кодек.
- Prediction – крупнейший источник сжатия: обычно даёт 10× ещё до того, как стартуют transform и quantization.
- DCT и его integer-родственники сидят в долях децибела от теоретически оптимального KLT при крошечной доле его стоимости.
- Rate-distortion optimization (J = D + λR) – энкодерный алгоритм, связывающий все три пласта в реальный битстрим.
- Нейронные кодеки в 2026-м учат те же три пласта из данных, но дефицит энергобюджета пока удерживает их в стороне от массовой delivery.
Что читать дальше
- Архитектура гибридного видеокодека – четырёхшаговый pipeline (predict, transform, quantize, code) в деталях.
- Entropy coding: краткое введение (Huffman, arithmetic, CABAC) – lossless-«дожатие» после квантования.
- Сколько можно сжать: предел Шеннона и где мы сейчас – кривая R(D) в цифрах и насколько каждый кодек висит над ней.
Источники
- Shannon, C. E. (1948). A Mathematical Theory of Communication. Bell System Technical Journal, 27(3), 379–423 и 27(4), 623–656. Основополагающая статья теории информации; вводит entropy, source coding theorem и channel capacity.
- Shannon, C. E. (1959). Coding theorems for a discrete source with a fidelity criterion. IRE National Convention Record, Part 4, 142–163. Формальное введение rate-distortion theory.
- Mounts, F. W. (1969). A Video Encoding System Using Conditional Picture-Element Replenishment. Bell System Technical Journal, 48(7), 2545–2554. Первое явное использование temporal redundancy в видео.
- Netravali, A. N., & Robbins, J. D. (1979). Motion-Compensated Television Coding: Part I. Bell System Technical Journal, 58(3), 631–670. Определяет motion-compensated prediction; вводит сам термин.
- Jain, J. R., & Jain, A. K. (1981). Displacement Measurement and Its Application in Interframe Image Coding. IEEE Transactions on Communications, COM-29(12), 1799–1808. Block-matching motion estimation, full search и 2-D logarithmic search.
- Akansu, A. N., & Torun, M. U. (2015). A Primer for Financial Engineering: Financial Signal Processing and Electronic Trading. Academic Press. Глава об оптимальности KLT и формальное доказательство, что KLT максимизирует coding gain для гауссовских источников.
- Effros, M., Feng, H., & Zeger, K. (2004). Suboptimality of the Karhunen–Loève Transform for Transform Coding. IEEE Transactions on Information Theory, 50(8), 1605–1619. Доказательство того, что KLT не оптимален в связке с uniform scalar quantization.
- Ahmed, N., Natarajan, T., & Rao, K. R. (1974). Discrete Cosine Transform. IEEE Transactions on Computers, C-23(1), 90–93. Вводит DCT-II и его быстрый алгоритм; фундамент JPEG, MPEG, H.26x.
- Wallace, G. K. (1992). The JPEG Still Picture Compression Standard. IEEE Transactions on Consumer Electronics, 38(1), xviii–xxxiv. Reference-папир, определивший, как именно DCT используется в JPEG.
- Sullivan, G. J., & Wiegand, T. (1998). Rate-Distortion Optimization for Video Compression. IEEE Signal Processing Magazine, 15(6), 74–90. Каноническая практическая ссылка по Lagrangian RDO в видео-энкодерах.
- Lu, G., Ouyang, W., Xu, D., Zhang, X., Cai, C., & Gao, Z. (2019). DVC: An End-to-end Deep Video Compression Framework. CVPR 2019. Первый полностью end-to-end learned видеокодек, превзошедший H.264.
- Li, J., Li, B., & Lu, Y. (2023). Neural Video Compression with Diverse Contexts. CVPR 2023. Статья DCVC-DC; первый learned-кодек, обогнавший reference-энкодер VVC по PSNR на нескольких test-set-ах.
- Kim, T., Oh, T., Hauptmann, A., & Park, T. (2024). NVRC: Neural Video Representation Compression. NeurIPS 2024. INR-based learned codec с 23% BD-rate выигрыша над VTM-RA на UVG.