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

Last updated

ni264

ni264 подключён между цепочкой видеофильтров и мультиплексором MP4.

1. Сводка

Кодирует видео H.264/AVC с аппаратным ускорением NetInt. Даёт ту же поставку H.264, что и x264, но выгружает кодирование на карту NetInt T4XX / Quadra, освобождая ЦПУ под параллельные кодирования и достигая целей пропускной способности в реальном времени, которые программному кодированию недоступны.

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

  • Держите высокопроизводительную ферму перекодирования, где много выходов H.264 должны завершаться в реальном времени или быстрее на одной машине.
  • Кодируете прямой или почти прямой процесс, чей бюджет задержки не допускает проходов анализа программного кодера.
  • Готовите H.264-копию лестницы ABR, когда бюджет ЦПУ уже потрачен на параллельные ветви x264 / x265 / упаковки.
  • Перекодируете из любого источника, отличного от H.264, на системе с ускорителем NetInt, который иначе простаивал бы.

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, готовая к мультиплексированию.

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

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

5. Параметры

Форма «Настройки» узла ni264.

Форма «Настройки» — один столбец. Описаны в порядке следования в форме.

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

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

    • Что задаёт. Подпись над плиткой; на кодирование не влияет.
    • Когда менять. Задавайте, когда в одном графе несколько узлов ni264 (параллельные копии на одной карте-ускорителе), чтобы каждая ветвь была узнаваема.
  • Profile (enum, по умолчанию main)

    Профиль H.264.

    • Что задаёт. Набор возможностей декодера, нужных выходному потоку. baseline — самый совместимый (без B-кадров), main — частый безопасный выбор, high включает преобразование 8×8 и более богатые инструменты кодирования, поддерживаемые современными декодерами, high10 делает то же с 10-битными сэмплами для HDR или финишных конвейеров.
    • Когда менять. Выбирайте наименьший профиль, который принимают целевые декодеры. Опускайтесь до baseline только для очень старого мобильного или приставочного оборудования, не декодирующего B-кадры.
    • Допустимые значения. baseline, main, high, high10.
    • Обязательно. да.
  • Codec Level (enum, по умолчанию Auto)

    Флаг уровня H.264 в битовом потоке.

    • Что задаёт. Бюджет декодера, который должен поддерживать плеер — разрешение, частота кадров, потолок битрейта, размер DPB. Auto даёт ускорителю выбрать уровень, согласованный с настройками кодирования.
    • Когда менять. Задавайте конкретный уровень, когда спецификация поставки его требует (вещательные конвейеры часто фиксируют Level 4.0 или 4.1 для HD) или когда целитесь в декодеры с батарейным питанием, заявляющие жёсткий потолок.
    • Допустимые значения. Auto (пусто), 1, 1.1, 1.2, 1.3, 2, 2.1, 2.2, 3, 3.1, 3.2, 4, 4.1, 4.2, 5, 5.1, 6, 6.1, 6.2.
  • Rate Control (enum, по умолчанию ABR)

    Стратегия битрейта.

    • Что задаёт. Целится ли кодер в средний битрейт (ABR) или держит битрейт ровным (CBR). Аппаратный бэкенд не предоставляет режим CRF — для VOD с постоянным качеством используйте x264 на ЦПУ того же процесса.
    • Когда менять. Выбирайте ABR для предсказуемого размера файла на VOD или поставках с прогрессивной загрузкой; CBR — для вещания или каналов с фиксированной полосой (спутниковый аплинк, выделенный слот CDN), где битрейт не должен дрейфовать.
    • Допустимые значения. ABR, CBR.
    • Обязательно. да.
  • vbvBuf size (number мс, по умолчанию 3000)

    Размер буфера VBV в миллисекундах битрейта.

    • Что задаёт. Размер виртуального буфера декодера, который кодер соблюдает при управлении битрейтом, выраженный в миллисекундах. Значение 3000 резервирует три секунды запаса на целевом битрейте; бо́льшие буферы дают кодеру тратить больше бит на сложные сцены, экономя на простых.
    • Когда менять. Повышайте (к 3000) для VOD, когда полоса в избытке, а визуальное качество важнее ровности битрейта. Понижайте (к 30–500) для прямой или интерактивной доставки, где принимающий декодер не может позволить долгий pre-roll. Диапазон: от 30 до 3000.
  • Bitrate (number KBPS, обязательно)

    Целевой битрейт H.264.

    • Что задаёт. Средний (ABR) или постоянный (CBR) выходной битрейт, к которому стремится ускоритель, в килобитах в секунду.
    • Когда менять. Задавайте всегда, когда Rate Control — ABR или CBR. Типичные значения: 2000–4000 KBPS для 720p, 4000–8000 KBPS для 1080p, 12000+ KBPS для UHD. Звёздочка в форме (Bitrate*) помечает поле как обязательное.
    • Обязательно. да.
  • GOP pattern (enum, по умолчанию I-B-B-B-P,... (gop_size=4))

    Шаблон типов кадров внутри каждого GOP.

    • Что задаёт. Форму группы изображений — целиком интра (I-I-I-I,...), целиком P (I-P-P-P,...), целиком B (I-B-B-B,...) или смешанный шаблон, такой как ритм произвольного доступа по умолчанию I-B-B-B-P. Значение gop_size в подписи каждого варианта — это ритм внутри одного повторяющегося цикла.
    • Когда менять. Выбирайте интра-only-шаблон (вариант 1) только когда дальнейший монтаж требует покадрово точной перемотки — для этого предпочтите avcintra. Выбирайте шаблоны с подряд идущими P (варианты 2 / 6 / 9) для прямого кодирования с низкой задержкой. Оставляйте смешанный шаблон по умолчанию для VOD и доставки ABR.
    • Допустимые значения. 1: I-I-I-I,..I (all intra, gop_size=1), 2: I-P-P-P,... P (consecutive P, gop_size=1), 3: I-B-B-B,...B (consecutive B, gop_size=1), 4: I-B-P-B-P,... (gop_size=2), 5: I-B-B-B-P,... (gop_size=4), 6: I-P-P-P-P,... (consecutive P, gop_size=4), 7: I-B-B-B-B,... (consecutive B, gop_size=4), 8: I-B-B-B-B-B-B-B-B,... (random access, gop_size=8), 9: I-P-P-P,... P (consecutive P, gop_size=1, single reference).
  • GOP (number кадры, по умолчанию 92)

    Интервал ключевых кадров.

    • Что задаёт. Максимальное число кадров между ключевыми кадрами IDR. Значение должно быть кратно gop_size выбранного GOP pattern.
    • Когда менять. Для стриминга задавайте небольшое кратное частоты кадров (обычно 2× fps, чтобы IDR попадал на каждую границу сегмента). Для VOD бо́льшие значения (4× — 10× fps) лучше сжимают, но стоят точности перемотки. Диапазон: от 0 до 1024.
  • Enable flushing the GOP (boolean, по умолчанию выкл.)

    Сбрасывать предыдущий GOP на каждом IDR.

    • Что задаёт. Сбрасывает ли кодер все кадры предыдущего GOP перед вставкой следующего IDR. С установленным флагом каждый сегмент HLS / DASH содержит все объявленные им кадры; без него первые несколько кадров каждого сегмента могут принадлежать предыдущему GOP.
    • Когда менять. Включайте для выходов HLS или DASH с невыровненными шаблонами GOP, чей сегментатор строг к самодостаточности сегментов. Оставляйте выключенным для простых поставок MP4, где выравнивание сегментов нерелевантно.
  • Enable AUD (Access Unit Delimiters) (boolean, по умолчанию выкл.)

    Вставлять NAL-единицы AUD на границах кадров.

    • Что задаёт. Пишет ли кодер NAL-единицы разделителей единиц доступа между кадрами в битовом потоке.
    • Когда менять. Включайте для выходов в транспортный поток MPEG-2 (вещательный мультиплекс, спутниковая контрибуция), где AUD требуются спецификацией контейнера. Оставляйте выключенным для MP4, HLS, DASH и других контейнеров на основе ISO-BMFF — там AUD избыточны и добавляют небольшие накладные расходы на кадр.

Соответствие JSON-ключей и названий полей

JSON-ключ Название поля
rc_init_delay vbvBuf size
gop_idx GOP pattern
gop GOP
flush_gop Enable flushing the GOP
aud Enable AUD (Access Unit Delimiters)

6. Пример

Адаптивный стриминг с HLS, DASH и субтитрами на холсте

Полный разбор — переменные, настройка каждого узла и ожидаемый результат — смотрите в Adaptive streaming with HLS, DASH and captions.

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

  • Adaptive streaming with HLS, DASH and captions — работает как аппаратно-ускоренная H.264-копия, питающая упаковщики HLS v3, HLS v5 и DASH параллельно с программной ветвью x264.

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

  • Перекодирование существующего H.264. Когда источник уже H.264 с приемлемым битрейтом, декодирование и повторное кодирование через этот узел жгут время ускорителя и накапливают артефакты сжатия. Используйте copy, когда менять нужно только контейнер.
  • Целевой CRF на оборудовании. Этот узел предоставляет только ABR и CBR; режима постоянного качества нет. Попытка имитировать кодирование CRF заданием очень высокого целевого битрейта тратит биты без лежащего в основе контроля качества. Для VOD с постоянным качеством кодируйте на ЦПУ через x264.
  • Принудительные конверсии пиксельного формата на ЦПУ перед ускорителем. Когда цепочка фильтров выше по потоку выполняет ЦПУ-связанные конверсии vf/format или vf/scale прямо перед этим узлом, кадры скачиваются из памяти ускорителя, обрабатываются на ЦПУ и снова загружаются — что сводит на нет аппаратный тракт. Двигайте работу с пиксельным форматом выше vf/hwupload или опирайтесь на нативный масштабатор ускорителя, когда он доступен.
  • Выбор неверного GOP pattern для поставки. Вариант 1 (интра-only) верен только для монтажных интермедиатов; его применение к стриминговой ABR-копии даёт файлы в 5–10 раз крупнее необходимого. Используйте avcintra для интра-only-поставок и оставляйте GOP pattern на смешанном ритме по умолчанию для стриминга.
  • AUD на MP4. Включение Enable AUD для выхода MP4 слегка раздувает файл без пользы, а некоторые устаревшие плееры предупреждают или отвергают поток. Оставляйте AUD для контрибуции MPEG-TS.

9. Заметки

Этому кодеру нужен видеоускоритель NetInt (семейство T4XX / Quadra) на хосте выполнения; развёртывания без него откатываются к программному кодированию или падают. Аппаратный ускоритель накладывает более узкий набор Profile, чем программный libx264 — нет high422 или high444. Сопрягайте узел с vf/hwupload выше по потоку, когда работаете в процессе, иначе остающемся в памяти ЦПУ; на выделенных узлах-перекодировщиках шаг загрузки может быть не нужен.

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