Содержание статьи +
- TL;DR
- Почему это важно
- Что такое «mode» в современном кодеке
- Задача rate-distortion в одном абзаце
- Lambda – единственное число, которое управляет всем
- Полная RDO-петля по шагам
- Как реальные кодеры жульничают – fast mode decision
- RDOQ – RDO внутри квантователя
- Восемь ручек, которые на практике крутят
- Где это ломается – два частых режима отказа
- Где Фора Софт вписывается
- Что впереди – нейросетевое RDO и обучаемое mode decision
- Ключевые выводы
- Что читать дальше
TL;DR
Mode decision – это выбор, который кодер делает тысячи раз на каждый кадр: для каждого блока в картинке решить, какой из десятков доступных инструментов кодирования (направление intra-предсказания, опорный кадр для inter, размер блока, преобразование) даст лучший результат. Rate-distortion optimization, или RDO, – это математически корректный способ сделать этот выбор: каждый кандидат кодируется ровно настолько, чтобы измерить его битовую стоимость и искажение, две величины сворачиваются в одно число с помощью множителя Лагранжа λ, и побеждает кандидат с минимальной суммарной стоимостью. Все современные кодеки – H.264, HEVC, VP9, AV1, VVC – используют ту же идею, которую Sullivan и Wiegand описали в своей статье 1998 года, и глубина поиска RDO определяет компромисс «качество vs скорость» сильнее любого другого параметра. Настройка RDO – это то, что превращает x265 из --preset ultrafast в --preset placebo и делает SVT-AV1 preset 4 вдвое дороже, чем preset 8, ради 5–8% экономии размера файла.
Почему это важно
Пресет кодера – это, по сути, рецепт того, насколько глубоко гонять RDO, поэтому понимание mode decision – это разница между выбором пресета «по приметам» и осознанным выбором с пониманием того, что именно он делает. Продакт-менеджер, который знает, что --rd 5 в x265 включает rate-distortion-оптимизированное квантование, а --rd 3 нет, перестанет считать, что «выше всегда лучше», и начнёт задавать вопрос: оправданы ли дополнительные ~20% CPU теми несколькими процентами битрейта, которые имеют значение на вашем масштабе. Стриминг-инженер, который умеет читать лог кодера и видит, сколько из 35 intra-направлений было отобрано SATD перед полным RDO, точно поймёт, куда ушла скорость. Основатель, сравнивающий вендоров AV1, осознает, что два AV1-кодера на одном и том же номере пресета могут проводить совершенно разный поиск и выдавать разные файлы. Эта статья проходит по тому, что такое mode decision, почему RDO – математически правильный способ выбирать, как λ вычисляется из QP, как реальные кодеры аппроксимируют полный поиск, чтобы оставаться быстрыми, и какие практические ручки доступны.
Что такое «mode» в современном кодеке
Современный видеокодер не сжимает кадр одним куском. Он разбивает кадр на quadtree кодирующих блоков (CTU до 64×64 в HEVC, superblocks 128×128 в AV1, CTU 128×128 в VVC), а затем внутри каждого блока выбирает кодирующие решения независимо. Набор решений для одного блока и называется его mode. Mode – это связка маленьких решений:
- Как предсказать пиксели. Использовать соседа в том же кадре (intra) или скопировать патч из другого кадра (inter). Внутри intra – выбрать одно из 35 направлений в HEVC, 56 в AV1 или 67 в VVC. Внутри inter – выбрать один или два опорных кадра, motion vector для каждого и фильтр субпиксельной интерполяции.
- Как разбить блок. Оставить одним большим блоком или разбить на четыре меньших; HEVC поддерживает только квадратные разбиения, AV1 – квадратные плюс несколько прямоугольных, VVC – гораздо более богатый набор, включая тернарные сплиты.
- Какое преобразование применить к остатку предсказания. По умолчанию DCT-II, но HEVC предлагает альтернативное преобразование для 4×4 intra-блоков, AV1 – 16 комбинаций DCT / ADST / identity, а VVC – Multiple Transform Selection (MTS) и Low-Frequency Non-Separable Transform (LFNST) поверх.
- Насколько агрессивно квантовать каждый коэффициент преобразования. Block-QP можно изменять относительно slice-QP; RDOQ (rate-distortion-оптимизированное квантование) может заменить округлённый коэффициент чуть другим значением, которое кодируется дешевле.
Каждое из этих решений – дискретный выбор, и кодер должен сделать их все, прежде чем узнает реальную битовую стоимость и реальное качество реконструкции блока. Количество правдоподобных комбинаций на блок огромно – в VVC, если действительно перебирать всё, число легальных режимов внутри одного CTU исчисляется сотнями миллионов. Кодер, который хочет выдавать риалтайм-поток, не может протестировать их все. RDO – это каркас, который говорит, как сравнивать любые два кандидата и выбирать лучшего; практический кодер дальше – это аккуратный набор сокращений, который урезает поиск до тысяч кандидатов на CTU, а не до сотен миллионов.
Задача rate-distortion в одном абзаце
Сжатие – это всегда обмен. Тратишь больше битов – реконструкция ближе к оригиналу; тратишь меньше – реконструкция уходит дальше. График искажения от битрейта, называемый rate-distortion-кривой, монотонно убывает – качество растёт с битрейтом – и хороший кодер работает на нижней огибающей этой кривой для любого данного контента. Задача mode decision – это в точности задача удержаться на этой огибающей: из всех кодирований одного блока, которые позволяет синтаксис кодека, выбрать такое, которое лежит на огибающей, а не выше неё.
Математически это constrained-оптимизация. Нужно минимизировать суммарное искажение D по картинке при ограничении суммарного битрейта R ≤ R_target. Прямая constrained-форма сложна, потому что решения в одном блоке ограничивают решения в другом (общий бюджет). Трюк, делающий задачу решаемой (Sullivan и Wiegand, 1998, статья «Rate-distortion optimization for video compression» в IEEE Signal Processing Magazine), – переписать constrained-задачу как unconstrained с помощью множителя Лагранжа:
J = D + λ · RJ – rate-distortion-стоимость одного кодирующего выбора. D – его искажение (обычно sum of squared differences, SSD, между оригиналом и реконструкцией). R – его rate в битах. λ – одно положительное число, множитель Лагранжа, фиксирующее наклон обмена. Когда λ маленькая, член λR маленький, и кодер в основном минимизирует D – щедро тратит биты на качество. Когда λ большая, член λR доминирует, и кодер в основном минимизирует R – соглашается на больше искажений ради меньших битов. Для любого контента существует одно конкретное λ, которое выводит вас на rate-distortion-огибающую. Выберите λ, потом выберите в каждом блоке режим, минимизирующий J, – и вы получите наименьшее суммарное искажение при том битрейте, который порождает это λ.
Глубинная причина того, почему это работает, – выпуклость. По мере того как λ пробегает от нуля до бесконечности, оптимальная рабочая точка обрисовывает выпуклую оболочку rate-distortion-кривой. Каждая точка на этой оболочке достижима каким-нибудь λ. Так что вместо тяжёлого глобального поиска кодер делает простой локальный поиск в каждом блоке – и при правильном глобальном λ локальные решения складываются в глобально почти-оптимальное кодирование. Конструкция точна для выпуклых задач и очень хорошая эвристика для невыпуклой реальной.
Lambda – единственное число, которое управляет всем
Каждый современный кодер выбирает λ как функцию параметра квантования QP. Зависимость экспоненциальная: с ростом QP на 6 шаг квантования удваивается, кодер вдвое агрессивнее выбрасывает детали, значит, и λ примерно удваивается. Эталонный кодер HEVC HM использует
λ_mode = α · 2^((QP − 12) / 3)где α – content-зависимый коэффициент: 0.85 для конфигурации Random Access, ниже для I-кадров, чуть выше для B-кадров на глубоких темпоральных уровнях. Та же семья формул, с разными константами, ставится в x264, x265, VVenC, libvpx, libaom, SVT-AV1 и VTM. Классическая ссылка – статья Wiegand–Girod «Lagrange multiplier selection in hybrid video coder control» (2001); современный обзор – Frontiers 2023 «The disparity between optimal and practical Lagrangian multiplier estimation in video encoders».
Разберём пример. Допустим, кодируем при QP = 27 – обычный стриминговый QP для 1080p H.264.
- QP − 12 = 15.
- (QP − 12) / 3 = 5.
- 2^5 = 32.
- λ_mode = 0.85 × 32 = 27.2.
Значит, при QP = 27 кодер взвешивает каждый бит rate против примерно 27 единиц квадратичного искажения. Если кандидат A стоит на 100 битов дороже B, но снижает SSD на 3000, то для A добавочная стоимость в J равна 100 × 27.2 = 2720, выигрыш в J – 3000, и A побеждает на 280. Если бы A снизил SSD только на 2500, A проиграл бы 220 – даже будучи блоком более высокого качества – потому что лишние 100 битов не оправдались при этом λ.
Вторая формула, λ_motion = √λ_mode, используется при motion estimation, где искажение измеряется в единицах sum of absolute differences (SAD), а не SSD; SAD масштабируется примерно как квадратный корень из SSD, и √λ_mode выравнивает их. Конкретно для нашего примера λ_motion = √27.2 ≈ 5.21 – motion-search предпочтёт motion vector, стоящий на 1 лишний бит, только если он срежет SAD хотя бы примерно на 5 единиц абсолютной разности.
Численная чувствительность λ – это реальная инженерная забота. Вендор, решивший умножить λ на 1.2 «ради экономии битрейта на высоком QP», обменяет это на измеримое падение PSNR; вендор, разделивший λ на 1.2, съест лишние биты, не купив достаточно качества. Production-кодеры выходят с аккуратно настроенными λ-таблицами, и большинство тюнингов – --tune psnr, --tune ssim, --tune vmaf – это, по сути, маленькие подстройки того λ, которое кодер использует внутри своих RDO-петель.
Полная RDO-петля по шагам
Учебниковое полное RDO mode decision для одного блока выглядит так. Обозначения по эталонному кодеру HEVC HM, но любой современный кодер делает какую-то версию этого.
- Перечислить кандидатные режимы. Построить список всех режимов, которые синтаксис разрешает для этого блока. Для inter-блока 32×32 в HEVC список включает 35 intra-направлений, два skip-кандидата, несколько merge-кандидатов, разные комбинации опорный кадр + motion vector, четыре варианта разбиения и так далее – сотни записей.
- Для каждого кандидата: а. Запустить реальные инструменты кодирования. Сгенерировать предсказание. Вычесть из оригинала – получить остаток. Преобразовать остаток (DCT-II или то, что выбирает этот кандидат). Квантовать коэффициенты преобразования с текущим QP. б. Применить RDOQ, если уровень RD это позволяет: вместо прямого округления попробовать несколько соседних целых уровней для каждого значимого коэффициента и оставить тот, который минимизирует J = D + λR_coeff. в. Энтропийно закодировать квантованные коэффициенты реальным context-adaptive coder (CABAC для HEVC и VVC; CABAC-подобные кодеры для AV1 и AVS3). Посчитать реальное число битов R. г. Обратно проквантовать коэффициенты, обратно преобразовать остаток, прибавить предсказание и получить реконструированный блок. Замерить SSD против оригинала – это D. д. Вычислить J = D + λ · R.
- Выбрать кандидата с минимальным J. Зафиксировать этот режим, записать его биты в битстрим, сохранить его реконструкцию в буфере опорных кадров.
Эта петля точная в том смысле, что каждая стоимость – реальная: реальные биты от реального энтропийного кодера, реальное искажение от реальной реконструкции. Чистое RDO – это то, что получится при --rd 6 в x265 с --no-fast-intra и тугим --rd-refine или при запуске VTM (эталонного кодера VVC) в дефолтной конфигурации Random Access. Это также то, что никто не отгружает в продакшен. Одно полное-RDO 4K-кодирование на современном CPU может идти в сотни раз медленнее воспроизведения – VTM на дефолте кодирует 4K-видео хорошо меньше чем 1 кадр в минуту на 16-ядерной рабочей станции. Сокращения, описанные ниже, – это то, что делает реальный софт возможным.
Как реальные кодеры жульничают – fast mode decision
У продакшен-кодера есть бюджет качества (потерять не больше X% BD-rate против полного RDO) и бюджет скорости (бежать быстрее Y× реального времени на Z ядрах). Mode decision – это место, где живёт почти весь компромисс скорость-vs-качество. Доминируют шесть семейств сокращений.
Предварительный отбор кандидатов по дешёвой стоимости. Прежде чем гонять полное RDO на кандидате, кодер считает дешёвый суррогат – обычно Sum of Absolute Transformed Differences (SATD), L1-норму остатка, преобразованного Адамаром. SATD примерно в 50× дешевле полного RDO и хорошо коррелирует с финальной rate-distortion-стоимостью. Кодер ранжирует всех кандидатов по SATD, оставляет топ-K (K обычно 3–8) и гонит полное RDO только на них. Это доминирующий трюк fast intra mode decision: вместо полного RDO на всех 35 HEVC-intra-направлениях x265 считает SATD на всех 35, оставляет лучшие 3 и гонит полное RDO только на этих 3. Потеря качества обычно меньше 0.2% BD-rate; ускорение – примерно 10×.
Раннее завершение на родительском блоке. Когда кодер решает, расщеплять ли CTU 64×64 на четыре 32×32, он сначала кодирует целиком 64×64 лучшим не-расщеплённым режимом. Если получившееся J «достаточно хорошо» – ниже content-adaptive порога, выведенного из стоимостей соседей, – кодер пропускает рекурсивный поиск и фиксирует 64×64. Тот же трюк работает на каждом уровне quadtree. x265 называет это early-CU termination; порог настраивается флагами --limit-modes, --limit-refs, --early-skip.
Пространственное наследование. Соседние блоки коррелированы. Если блок слева выбрал горизонтальное intra-направление, текущий блок с гораздо большей вероятностью тоже выберет горизонтальное. Большинство кодеров смещают поиск к соседям: на быстрых пресетах тестируют только те режимы, что выбрали соседи, плюс маленький набор «всегда тестировать» по умолчанию. Смещение небезопасно у краёв и на склейках сцен, поэтому кодеры отменяют его при детекции смены сцены.
Lookahead и классификация сложности. Отдельный проход, идущий на десятки кадров впереди кодера, классифицирует сложность каждого кадра. Простой плоский контент с малым движением получает облегчённый mode-search; сложный высокодвижный – более тяжёлый. x264 называет это mb-tree, x265 – CU-tree. Этот классификатор – причина, по которой статичный поток с веб-камеры кодируется в разы дешевле спортивной трансляции на том же разрешении.
Многопроходный тюнинг. Двух- и трёхпроходные кодеры используют первый проход, чтобы узнать сложность каждой области, и потом гонят более туго настроенную RDO-петлю в финальном проходе, тратя больше тактов там, где это важно. VOD-пайплайны (Netflix, YouTube, Disney+) выполняют до 6 проходов на title; live-кодеры идут одним проходом с агрессивным lookahead.
Поблочная модуляция QP. Внутри RDO кодер может подкручивать QP вверх или вниз на уровне блока (в пределах, разрешённых синтаксисом). Меньший QP – выше λ относительно искажения – больше потраченных битов – применяется на лицах, на регионах, опознанных моделью saliency как важные, в центре кадра для VR-контента. Это фундамент per-title и per-scene encoding, используемого в современных VOD-пайплайнах.
Совокупный эффект – поиск в сотни раз быстрее полного RDO, отдающий лишь несколько процентов BD-rate. Налог быстрого пресета на x265 medium (по умолчанию) – примерно 4–6% BD-rate против --preset placebo; налог на x265 ultrafast – примерно 25–30%. Внутри SVT-AV1 та же закономерность: preset 8 примерно на 4% позади preset 4 (бенчмарки Streaming Learning Center), а preset 12 – на 15–20% позади. Бо́льшая часть этой разницы живёт именно в mode decision; преобразование, квантование и энтропийное кодирование вносят гораздо меньше.
RDOQ – RDO внутри квантователя
Второе место, где появляется RDO и его часто упускают, – это само квантование. После преобразования каждый коэффициент делится на шаг квантования и округляется до целого. Наивное округление всегда выбирает ближайшее целое. Rate-distortion-оптимизированное квантование (RDOQ) делает иначе: для каждого значимого коэффициента рассматривает два-три соседних целых уровня и выбирает уровень, минимизирующий J для этого одного коэффициента, учитывая битовую стоимость его кодирования в энтропийном кодере.
Пример. Допустим, коэффициент преобразования после деления на шаг QP попал в 4.4. Наивное округление даёт 4. RDOQ спрашивает: «Если закодировать 3, искажение вырастет на ((4.4 − 3)² − (4.4 − 4)²) × step² = ((1.4)² − (0.4)²) × step² = 1.8 × step² единиц, но энтропийному кодеру нужно примерно на 0.3 бита меньше, чтобы закодировать 3 вместо 4 в этом контексте. При λ_coeff = 27 сэкономленная J = 0.3 × 27 = 8.1 единицы. Если 1.8 × step² < 8.1 (то есть step < 2.12), побеждает 3. Иначе – 4».
RDOQ также управляет trellis-обнулением коэффициентов: если несколько последних ненулевых коэффициентов блока вносят в D меньше, чем стоят в R, обнуляем их. Решётчатый (trellis) взгляд важен, потому что контекстно-адаптивный CABAC делает стоимость одного коэффициента зависящей от соседей; оптимальный паттерн нулей и не-нулей находится динамическим программированием, а не покоэффициентно.
RDOQ – это то, что x265 включает на --rd 4 и выше и что HEVC HM использует по умолчанию. Это даёт примерно 1–3% BD-rate сверх окружающего mode-decision RDO. Стоимость на коэффициент растёт на 30–40%, и поэтому отключение RDOQ – первое, что делает каждый low-latency-кодер. В SVT-AV1 аналогичный механизм называется trellis quantization; у aomenc – trellis coefficient optimization, управляемое флагом --disable-trellis-quant. Статья Ramos et al. 2015 «Rate-distortion optimized quantization in HEVC: Performance limitations» – стандартная ссылка по математике и пределам.
Восемь ручек, которые на практике крутят
В продакшене λ напрямую почти никогда не трогают. Крутят пресет кодера и небольшой набор ручек, меняющих глубину mode-search. Таблица ниже покрывает основные кодеры.
| Кодер | Главная ручка глубины | Ручка RDO-квантования | Битрейтовый эффект шага глубже | Типичная стоимость CPU |
|---|---|---|---|---|
| x264 (H.264) | --preset (ultrafast → placebo) | --trellis 0/1/2 | 0.5–2% на шаг пресета | ~1.5× на шаг пресета |
| x265 (H.265) | --preset и --rd 0–6 | --rdoq-level 0/1/2 | 1–3% на шаг --rd | ~1.3× на шаг --rd |
| libvpx (VP9) | --cpu-used 0–9 | --tune-content default/screen/film | 2–5% на шаг cpu-used | ~1.4× на шаг |
| libaom (AV1) | --cpu-used 0–8 | --disable-trellis-quant (off = с RDOQ) | 2–6% на шаг cpu-used | ~1.5× на шаг |
| SVT-AV1 (AV1) | --preset 0–13 | --rdoq-level 0/1 | 2–5% на шаг пресета в диапазоне 4–8 | ~1.4× на шаг пресета |
| VVenC (VVC) | --preset faster → slower | --rdoq 0/1/2 | 3–7% на шаг пресета | ~1.7× на шаг пресета |
| VTM (VVC) | эталонный кодер, без пресетов | RDOQ, SignHideFlag в cfg | территория эталонного кодера, в 10×+ медленнее VVenC | n/a |
Закономерность везде одинакова: одна preset-образная ручка контролирует ширину поиска и глубину RDO, одна вторичная ручка включает или отключает RDOQ, и одна-две третичные – тюнинги вроде psy-rd (x264, x265) и tune (libvpx, SVT-AV1).
Где это ломается – два частых режима отказа
Отказ 1: lambda не подходит под контент. Дефолтные таблицы λ_mode во всех кодерах подогнаны на тест-сетах, где много natural-контента и мало screen-контента. Screen content (презентации, видеоигры, демо ПО) имеет совсем другие rate-distortion-характеристики: резкие границы, большие плоские области, повторяющийся текст. Дефолтная λ поощряет агрессивное transform-coding на screen content там, где должен бы работать palette-режим или intra-block-copy. Фикс в HEVC и VVC – SCC-инструменты (Screen Content Coding); в кодерах – --tune zerolatency + --tune-content screen или эквивалент. Без этого screen content при типичных QP отгружается на 15–20% выше нижней огибающей.
Отказ 2: SATD-префильтр отбрасывает реального победителя. SATD быстрый, но игнорирует контекст энтропийного кодера – его можно обмануть, когда у фактического лучшего кандидата высокий SATD из-за необычного распределения энергии остатка, но очень компрессируемых коэффициентов. Результат – артефакты «missed mode»: кодер сходится на чуть неправильном intra-направлении на гранях, давая видимые «ступеньки» вдоль высококонтрастных диагоналей. У большинства кодеров есть ручка --max-tu-size или --analyse all, отключающая агрессивную SATD-фильтрацию для проблемного контента; стоимость реальная (5–15% CPU), но на titles, где это важно, выигрыш по качеству виден. Это одна из самых частых причин, по которым студии сопротивляются мандату «возьмите более быстрый пресет» от операционной команды.
Ловушка, на которую стоит указать: не отключайте RDO полностью на быстром пресете, но и не сравнивайте пресеты при одинаковом CRF. RDO и CRF взаимодействуют – быстрый пресет на том же CRF идёт на более высоком битрейте (потому что кодер делает худшие выборы и ему нужно больше битов, чтобы компенсировать). Сравнивайте пресеты при одинаковом битрейте или при одинаковом VMAF, не при одинаковом CRF.
Где Фора Софт вписывается
Мы строим видеопайплайны для стриминга, OTT/Internet TV, видеонаблюдения, e-learning, телемедицины и видеоконференцсвязи. В каждой из этих вертикалей правильная настройка RDO своя. Поток телемедицины, который должен идти на 4-ядерной ARM-коробке в 30 fps и 1080p, нуждается в быстром пресете с RDO, ужатым до плотного CTU-листа режимов и минимально включённым RDOQ. OTT VOD-энкод для стриминг-сервиса идёт на SVT-AV1 preset 4 или x265 --rd 5 с полным RDOQ и экономит 5–8% полосы на title – на масштабе это реальные деньги. Surveillance-рекордер пишет 24/7, поэтому RDO должен гнаться за эффективностью вычислений сильнее, чем за качеством. Мы измеряем компромисс внутренними A/B-BD-rate-стендами на «ground-truth»-контенте из каждой вертикали, а не на универсальных UVG-клипах.
Что впереди – нейросетевое RDO и обучаемое mode decision
Следующий рубеж – замена внутренних петель RDO нейросетями. В литературе 2024–2025 видны два направления. Первое, обзорное у Zhang et al. (CVPR 2025, «Balanced Rate-Distortion Optimization in Learned Image Compression»), – сбалансированное RDO в полностью обучаемых image- и video-кодеках, где end-to-end нейрокодек учится с Lagrangian-функционалом и сеть учится своим имплицитным mode-decisions; в AV2 будут нейро-кодированные пути в этом духе (см. будущее нейрокодеков). Второе – drop-in нейросетевые помощники mode-decision для традиционных кодеров: маленькая CNN смотрит на блок и предсказывает, какие 3 из 67 VVC-intra-режимов отдать в шорт-лист для полного RDO, заменяя SATD-префильтр. Статья ECCV 2024 «Learned Rate Control for Frame-Level Adaptive Neural Video Compression» сообщает о среднем выигрыше 14.8% BD-rate на уровне кадра по сравнению с обычным rate-control + RDO; меньшие блочные помощники обычно дают 1–2% сверху сильного бейзлайна.
Классический каркас RDO никуда не уходит. λ-cost Sullivan и Wiegand остаётся loss-функцией нейроварианта. Что меняется – это политика поиска: процедурное решение, какие кандидаты тестировать и в каком порядке. Это в точности то, что фаст-пресетные сокращения аппроксимировали тридцать лет. Замена их обучаемой политикой – высокорычажная область для следующего поколения кодеков.
Ключевые выводы
- Mode decision – поблочный выбор предсказания, разбиения, преобразования и квантования; в современном кодеке сотни миллионов легальных режимов на CTU.
- RDO – лагранжев каркас, сравнивающий режимы по J = D + λR; побеждает кандидат с минимальным J.
- λ – экспоненциальная функция QP – HEVC использует λ ≈ 0.85 × 2^((QP − 12)/3) – единственная ручка, управляющая обменом rate-vs-качество.
- Реальные кодеры обрезают поиск SATD-префильтром, ранним завершением, смещением к соседям, многопроходной классификацией сложности.
- RDOQ переносит ту же идею внутрь квантователя, выбирая уровни коэффициентов, минимизирующие J, включая стоимость их энтропийного кодирования.
- Пресет – это в основном рецепт глубины поиска: шаг глубже стоит 30–50% CPU и экономит 1–5% BD-rate.
Что читать дальше
- Архитектура гибридного видеокодека – где RDO стоит в общей картине.
- Quantization: где теряется качество – тот QP, который двигает λ.
- Rate control: CBR, VBR, CRF, ABR, capped CRF – внешняя петля над mode decision.