Медиа.маги Документация

Last updated

x264

Узел «h.264 ЦПУ» (x264) в процессе.

1. Сводка

Программно кодирует видео H.264/AVC через libx264. На холсте узел называется h.264 ЦПУ. Настраиваемые пресеты, профили, уровни и режимы управления битрейтом (ABR, CRF, CBR) закрывают весь спектр задач — от вещания до доставки в веб.

2. Когда использовать

  • Готовите материалы H.264 для широкого распространения (веб, OTT, архив).
  • Создаёте прокси- или превью-копии, где допустимо кодирование только на ЦПУ.
  • Собираете многобитрейтные лестницы ABR, которые подаются на mp4 или в упаковщики HLS.
  • Перекодируете из любого источника, отличного от H.264, — перед перекодированием входа H.264 см. Антипаттерны.

3. Входы

  • Videofiltergraph.VideoTransform. Видеопоток или граф фильтров для кодирования. Обязателен.

    Совместимые узлы выше по потоку:

    • map/video — выбирает видеопоток для выхода.
    • vf/crop — обрезает кадр до интересующей области.
    • vf/dar — задаёт метаданные соотношения сторон при отображении.
    • vf/deinterlace — убирает артефакты чересстрочности.
    • vf/fieldorder — меняет или задаёт флаг порядка полей.
    • vf/format — преобразует пиксельный формат или цветовые свойства.
    • vf/fps — меняет частоту кадров на выходе.
    • vf/hwupload — загружает кадры в GPU для аппаратной обработки.
    • vf/letterbox — дополняет кадр до целевого растра.
    • vf/overlay — накладывает графику на видео.
    • vf/scale — масштабирует видео до заданных размеров.

4. Выходы

  • Videocore.VideoTrack. Закодированная видеодорожка H.264, готовая к мультиплексированию.

    Совместимые узлы ниже по потоку:

    • ccinject — вставляет скрытые субтитры в выход.
    • mov — упаковывает потоки в контейнер QuickTime MOV.
    • mp4 — упаковывает потоки в файл MP4 (ISO‑BMFF).
    • mxf — упаковывает потоки в контейнер MXF.
    • ts — упаковывает потоки в транспортный поток MPEG-2.
    • dash — упаковывает выход для потоковой передачи MPEG-DASH.
    • hls3 — упаковывает выход для HLS с плейлистами v3.
    • hls5 — упаковывает выход для HLS с плейлистами v5.

5. Параметры

Форма «Настройки» узла «h.264 ЦПУ» (x264).

Форма «Настройки» разбита на два столбца. Левый столбец задаёт идентичность кодека и управление битрейтом; правый — структуру GOP, опорные кадры и сигнальные флаги. Поля описаны в порядке их следования в форме. Названия полей сохранены так, как они написаны в форме.

Левый столбец

  • Node Label (string, по умолчанию пусто)

    Произвольное имя, отображаемое на плитке узла на холсте.

    • Что задаёт. Подпись над плиткой; на кодирование не влияет.
    • Когда менять. Задавайте, когда в одном процессе несколько узлов h.264 ЦПУ (например, разные битрейты лестницы ABR), чтобы каждую копию было видно с одного взгляда.
  • H264 Codec Profile (enum, по умолчанию "main")

    Профиль H.264. Жёстко задаёт набор возможностей, доступных кодеру, и перекрывает любую конфликтующую точечную настройку.

    • Что задаёт. Набор возможностей декодера, нужных для воспроизведения выхода (энтропийный кодер, преобразование 8×8, формат цветности, битовая глубина).
    • Когда менять. Выбирайте наименьший профиль, который принимают целевые устройства: baseline — для старых мобильных, main — для безопасного общего воспроизведения, high — для современного стриминга, а high10/high422/high444 — для мастеринга и постпродакшена.
    • Допустимые значения. baseline, main, high, high10, high422, high444.
    • Обязательно. да.
  • Preset (enum, по умолчанию "medium")

    Компромисс «скорость/качество», поставляемый libx264.

    • Что задаёт. Набор внутренних параметров кодера; более медленные пресеты делают больше анализа и дают меньший файл при том же качестве.
    • Когда менять. Переходите на fast/veryfast, когда ограничен ЦПУ или кодирование идёт в реальном времени; на slow/slower — для архивных мастеров, где лишнее время кодера некритично.
    • Допустимые значения. ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo.
    • Обязательно. да.
  • H264 Codec Level (enum, по умолчанию 41)

    Флаг уровня, записываемый в битовый поток.

    • Что задаёт. Бюджет декодера, который должен поддерживать плеер (разрешение, частота кадров, потолок битрейта, размер DPB).
    • Когда менять. Оставляйте 41 (Level 4.1) для типичного выхода 1080p; повышайте до 5/51 для 4K и понижайте для старых или маломощных декодеров, заявляющих конкретный уровень.
    • Допустимые значения. 1, 11, 12, 13, 2, 21, 22, 3, 31, 32, 4, 41, 42, 5, 51.
    • Обязательно. нет.
  • Rate Control (enum, по умолчанию "abr")

    Определяет, какие поля ниже становятся активными.

    • Что задаёт. Стратегию битрейта кодера: ABR держит средний битрейт, CRF держит постоянное воспринимаемое качество, CBR держит битрейт ровным.
    • Когда менять. Выбирайте ABR для предсказуемого размера файла, CRF — для VOD, где качество важнее размера, и CBR — для вещания или доставки с фиксированной полосой (слот CDN, спутниковый канал). Переключение режима показывает соответствующие поля ниже.
    • Допустимые значения. ABR, CRF, CBR.
    • Обязательно. да.
  • Rate Factor (number, по умолчанию 23; режим CRF)

    Целевой коэффициент качества для режима CRF.

    • Что задаёт. Постоянное воспринимаемое качество, которое держит кодер: меньшее значение — выше качество и больше файл, большее — наоборот.
    • Когда менять. Понижайте к 18, когда нужно почти визуально без потерь (мастеринг, сложный материал); повышайте к 28, когда размер важнее, чем мелкие детали. Поле действует, только когда Rate Control = CRF.
    • Обязательно. да, когда Rate Control = CRF.
  • Two Pass (boolean, по умолчанию false)

    Включает второй проход анализа.

    • Что задаёт. Делает ли libx264 проход сбора статистики перед финальным кодированием, получая полное представление о сложности сцен.
    • Когда менять. Включайте для кодирования в ABR, когда важны точность битрейта и качество; время кодирования при этом примерно удваивается. Выключайте для CRF (у него нет цели по битрейту) и для прямых эфиров.
    • Обязательно. нет.
  • Tune (enum, по умолчанию пусто)

    Подстройки под тип контента поверх выбранного Preset.

    • Что задаёт. Корректирует психовизуальные настройки, деблокинг и матрицы квантования под известный тип контента.
    • Когда менять. film — для игрового видео, animation — для мультфильмов и CGI, grain — для сохранения зерна плёнки, stillimage — для слайд-шоу, fastdecode — для маломощных плееров, zerolatency — для прямых трансляций. Оставляйте пустым, когда ничего не подходит.
    • Допустимые значения. пусто, film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency.
    • Обязательно. нет.
  • Scene Detection (boolean, по умолчанию true)

    Адаптивная расстановка IDR на склейках сцен.

    • Что задаёт. Может ли libx264 вставлять дополнительный ключевой кадр IDR при обнаружении смены сцены — в дополнение к ритму Key Interval.
    • Когда менять. Оставляйте включённым для VOD: ключевые кадры на склейках улучшают точность перемотки и сжатие. Выключайте, когда сегментатор ниже по потоку требует строго периодический GOP (некоторые упаковщики HLS/DASH, вещательные мультиплексоры).
  • Advanced options (array, по умолчанию [])

    Произвольная передача пар «ключ/значение» в libx264.

    • Что задаёт. Список «сырых» имён и значений параметров libx264, которые без изменений передаются кодеру; редактируется в отдельном окне (кнопка Edit).
    • Когда менять. Только когда настройка не вынесена в отдельное поле — типичные записи: rc-lookahead, порог scenecut или веса psy-rd для тонкой настройки.
    • Обязательно. нет.

Правый столбец

  • Key Interval (number, кадры; без значения по умолчанию)

    Максимальная длина GOP.

    • Что задаёт. Самую длинную серию кадров, которую libx264 выдаёт перед принудительным ключевым кадром IDR.
    • Когда менять. Для стриминга задавайте небольшое кратное частоты кадров (например, 2× fps, то есть 50 при 25 fps), чтобы попасть в границы сегмента упаковщика. Для VOD более длинные GOP (10× fps) лучше сжимают, но замедляют перемотку.
    • Обязательно. нет.
  • Min Key Interval (number, кадры; без значения по умолчанию)

    Минимальное расстояние между кадрами IDR.

    • Что задаёт. Не даёт libx264 ставить два IDR слишком близко, когда обнаружение сцен срабатывает многократно.
    • Когда менять. Повышайте для материала с частыми склейками (клипы, спорт), чтобы «мелькание» не порождало очень короткие GOP.
    • Обязательно. нет.
  • Open GOP (boolean, по умолчанию false)

    Разрешает B-кадрам ссылаться через границы ключевых кадров.

    • Что задаёт. Будет ли GOP «открытым» (B-кадры перед I-кадром могут ссылаться на предыдущий GOP) или «закрытым».
    • Когда менять. Включайте ради небольшого выигрыша в сжатии в конвейерах VOD, допускающих открытые GOP. Выключайте для целей HLS/DASH и вещания — большинство сегментаторов и систем вставки рекламы требуют закрытых GOP.
    • Обязательно. нет.
  • B-Frames (number, без значения по умолчанию; диапазон 0–16)

    Максимум подряд идущих B-кадров.

    • Что задаёт. Предел числа двунаправленно предсказанных кадров, которые libx264 может разместить между опорными кадрами.
    • Когда менять. Большие значения (3–8) улучшают сжатие для профилей main и high; ставьте 0 для baseline (где B-кадры запрещены) или для прямого эфира в режиме zerolatency.
    • Обязательно. нет.
  • Reference Frames (number, без значения по умолчанию; диапазон 1–16)

    Размер DPB.

    • Что задаёт. Сколько ранее декодированных кадров P- или B-кадр может использовать как опорные для предсказания движения.
    • Когда менять. 4–6 — хорошее значение по умолчанию. Повышайте к 16 для анимации, захвата экрана и CGI, где помогает долговременная временная корреляция; понижайте для старых декодеров с ограниченным DPB. Выбранный H264 Codec Level в итоге ограничивает это значение сверху.
    • Обязательно. нет.
  • Color Space (enum, по умолчанию пусто)

    Флаг матричных коэффициентов в битовом потоке.

    • Что задаёт. Тег цветовой матрицы, по которому плеер переводит YCbCr в RGB; сами пиксели не преобразуются.
    • Когда менять. Приводите в соответствие источнику: bt709 — для HD, smpte170m — для SD, bt2020nc — для UHD/HDR. Оставляйте пустым, чтобы унаследовать значение из входной цепочки фильтров.
    • Допустимые значения. пусто, bt709, fcc, bt470bg, smpte170m, smpte240m, GBR, YCgCo, bt2020nc, bt2020c, smpte2085, chroma-derived-nc, chroma-derived-c, ICtCp.
    • Обязательно. нет.
  • Color Transfer (enum, по умолчанию пусто)

    Флаг характеристик передачи (гамма-кривая).

    • Что задаёт. Тег OETF/EOTF, записываемый в битовый поток; пиксели опять же не изменяются.
    • Когда менять. bt709 — для SDR HD, smpte170m — для SDR SD, smpte2084 — для PQ HDR, arib-std-b67 — для HLG HDR. Задавайте, когда входная цепочка фильтров применила известную передачу.
    • Допустимые значения. пусто, bt709, bt470m, bt470bg, smpte170m, smpte240m, linear, log100, log316, iec61966-2-4, bt1361e, iec61966-2-1, bt2020-10, bt2020-12, smpte2084, smpte428, arib-std-b67.
    • Обязательно. нет.
  • Color Primaries (enum, по умолчанию пусто)

    Флаг основных цветов (primaries).

    • Что задаёт. Координаты цветности закодированного видео, по которым цветоуправляемые плееры точно его отображают.
    • Когда менять. bt709 — для HD, smpte170m — для SD, bt2020 — для UHD/HDR. Оставляйте пустым, когда источник уже корректно размечен выше по потоку.
    • Допустимые значения. пусто, bt709, bt470m, bt470bg, smpte170m, smpte240m, film, bt2020, smpte428, smpte431, smpte432.
    • Обязательно. нет.
  • B-Frame Decision (enum, по умолчанию "normal")

    Алгоритм выбора расстановки B-кадров.

    • Что задаёт. Как libx264 решает, куда ставить B-кадры: простым фиксированным шаблоном, быстрой эвристикой или полным RD-анализом.
    • Когда менять. Для общего применения оставляйте значение по умолчанию. На очень быстрых пресетах выбирайте более быстрый алгоритм, если критична скорость; на медленных пресетах — более медленный (RD-оптимальный), когда нужно выжать максимум качества при заданном битрейте.
  • B-Pyramid (enum, по умолчанию "normal")

    Как B-кадры могут ссылаться друг на друга.

    • Что задаёт. Могут ли отдельные B-кадры использоваться опорными для других B-кадров, улучшая сжатие.
    • Когда менять. Оставляйте включённым для стриминга и VOD. Отключайте для авторинга Blu-ray или старого оборудования, не поддерживающего B-пирамиду (спецификация допускает её только с Level 3.1 и выше и с некоторыми декодерами).
  • Slices (number, по умолчанию 0)

    Число слайсов на кадр.

    • Что задаёт. На сколько независимо декодируемых слайсов делится каждый кадр.
    • Когда менять. Оставляйте 0 (один слайс на кадр) ради лучшего сжатия. Повышайте только для задач с низкой задержкой или параллельного декодирования, где требуется конкретное число слайсов.
  • Video Format (enum, по умолчанию "unspecified")

    Флаг исходного формата в VUI.

    • Что задаёт. Тег метаданных, описывающий исходный видеоформат (NTSC, PAL, компонентный, MAC и т. п.); декодеры используют его только справочно.
    • Когда менять. Оставляйте значение по умолчанию, если только проверка соответствия стандарту ниже по потоку не требует конкретного тега (редко, в основном вещательные процессы).

6. Пример

H.264 HD на холсте

Полный разбор — переменные, настройка каждого узла и ожидаемый результат — смотрите в H.264 HD.

7. Где используется

  • Three-tier MP4 ladder (LQ / MQ / HQ) — три уровня x264 (LQ — двухпроходный CBR 400 кбит/с, MQ — однопроходный CBR 780 кбит/с, HQ — ABR 3000 кбит/с) подают на лестницу распространения с заданными оператором именами выходных файлов.
  • Cropped H.264 MP4 from interlaced source — кодирует поток H.264 High в ABR 3000 кбит/с с цветовой сигнализацией BT.709 на двух параллельных ветвях; основная ветвь берётся из обрезанного и деинтерлейснутого (yadif) кадра.
  • MPEG-TS broadcast pre-encode — кодирует поток H.264 High @ Level 4 с фиксированным CBR 9800 кбит/с и цветовой сигнализацией BT.709 для прямого мультиплекса MPEG-TS.
  • Content-aware preview proxy ladder — кодирует прокси в ABR 600 кбит/с на SD-ветвях и 1200 кбит/с на HD-ветвях с согласованными ограничениями битрейта и размерами буфера.
  • MP4 with branded logo overlay — кодирует брендированный кадр 1080p в ABR 1200 кбит/с (потолок 4800 кбит/с) для MP4 с корпоративным логотипом на каждом кадре.
  • Adaptive streaming with HLS, DASH and captions — работает как программная копия H.264, питающая HLS v3, HLS v5 и ветвь субтитров ccinject.
  • H.264 HD — перекодирует высокобитрейтный мастер в H.264 MP4 1280×720 25 fps.

8. Антипаттерны

  • Перекодирование входа H.264. Когда источник уже H.264, перекодирование тратит ЦПУ и накапливает артефакты сжатия. Используйте copy, когда преобразование не нужно, или меняйте только контейнер.
  • Rate Factor вместе с режимом ABR/CBR. Rate Factor управляет качеством в режиме CRF, а не битрейтом; задавать его при ABR или CBR бессмысленно — переключите Rate Control на нужный режим под целевой битрейт.
  • Open GOP на входе HLS/DASH. Большинство сегментаторов требуют закрытых GOP на границах сегментов. Для выходов адаптивного стриминга оставляйте Open GOP выключенным.
Медиа.маги Документация