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

Last updated

qsv264

qsv264 подключён между шагом vf/hwupload и мультиплексором MP4.

1. Сводка

Кодирует видео H.264/AVC с аппаратным ускорением Intel Quick Sync Video. Даёт ту же поставку H.264, что и x264, но выгружает кодирование на iGPU Intel или дискретную карту Arc / Flex, освобождая ЦПУ под параллельную работу и достигая целей пропускной способности в реальном времени.

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

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

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. Параметры

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

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

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

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

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

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

    Профиль H.264.

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

    Компромисс «скорость/качество» в кодере QSV.

    • Что задаёт. Набор внутренних параметров кодера. Более медленные пресеты делают больше анализа и дают меньший файл при том же целевом битрейте.
    • Когда менять. Переходите к fast / veryfast, когда пропускная способность в реальном времени бескомпромиссна; к slow / slower, когда у процесса есть запас, а качество при заданном битрейте важно. Более медленные пресеты QSV всё равно заметно быстрее программного medium.
  • H264 Codec Level (string, по умолчанию Auto)

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

    • Что задаёт. Бюджет декодера, который должен заявлять плеер — разрешение, частота кадров, потолок битрейта, размер DPB. Auto даёт QSV выбрать уровень, согласованный с настройками кодирования.
    • Когда менять. Фиксируйте конкретный уровень, когда спецификация поставки его требует (вещательные конвейеры часто требуют Level 4.0 или 4.1 для HD) или когда целитесь в декодеры с батарейным питанием и жёстким потолком.
  • Bitrate (number KBPS, без значения по умолчанию)

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

    • Что задаёт. Средний битрейт, к которому стремится кодер, в килобитах в секунду.
    • Когда менять. Задавайте всегда, когда нужна цель по битрейту. Типичные значения: 2000–4000 KBPS для 720p, 4000–8000 KBPS для 1080p, 12000+ KBPS для UHD.
  • Max bitrate (number KBPS, без значения по умолчанию)

    Верхний потолок битрейта.

    • Что задаёт. Пиковый битрейт, который кодеру разрешено выдать. В сочетании с Buffer size образует ограничение VBV.
    • Когда менять. Задавайте, когда у тракта доставки есть потолок полосы — чанки HLS, аппаратные декодеры, спутниковые аплинки. Оставляйте пустым для VOD, чьё единственное ограничение — средний Bitrate.
  • Buffer size (number KBPS, без значения по умолчанию)

    Размер буфера VBV.

    • Что задаёт. Размер виртуального буфера декодера, который кодер соблюдает при выдерживании Max bitrate.
    • Когда менять. Приводите в соответствие буферу, заданному целевым декодером. Частая отправная точка — Buffer size, равный Max bitrate (буфер на одну секунду); бо́льшие буферы сглаживают качество ценой задержки декодера.

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

  • B-Frames (number, без значения по умолчанию)

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

    • Что задаёт. Предел числа двунаправленно предсказанных кадров, которые QSV может разместить между опорными кадрами.
    • Когда менять. Большие значения (2–4) улучшают сжатие для профилей main и high. Ставьте 0 для baseline (где B-кадры запрещены) или для прямого кодирования с низкой задержкой.
  • Reference Frames (number, без значения по умолчанию)

    Размер DPB — сколько ранее декодированных кадров P- или B-кадр может использовать как опорные.

    • Что задаёт. Число опорных кадров, которые кодер держит в своём буфере декодированных изображений.
    • Когда менять. 24 — разумное значение по умолчанию для QSV. Выбранный H264 Codec Level в итоге ограничивает это значение сверху; QSV консервативнее с опорными кадрами, чем программный libx264.
  • Key Interval (number кадры, без значения по умолчанию)

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

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

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

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

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

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

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

JSON-ключ Название поля
profile H264 Codec Profile
level H264 Codec Level
maxrate Max bitrate
bufsize Buffer size
bf B-Frames
refs Reference Frames
gop Key Interval
gop_min Min Key Interval
gop_open Open GOP

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

  • Перекодирование существующего H.264. Когда источник уже H.264 с приемлемым битрейтом, декодирование и повторное кодирование через этот узел жгут время ускорителя и накапливают артефакты сжатия. Используйте copy, когда менять нужно только контейнер.
  • Принудительные ЦПУ-фильтры перед ускорителем. Когда цепочка выше по потоку выполняет ЦПУ-связанные конверсии vf/format или vf/scale прямо перед этим узлом, кадры скачиваются из памяти QSV, обрабатываются на ЦПУ и снова загружаются — что сводит на нет аппаратный тракт. Либо двигайте работу с пиксельным форматом выше vf/hwupload, либо опирайтесь на нативный масштабатор QSV.
  • Прогон битрейтов программного кодера через QSV без изменений. QSV на medium обычно требует на ~10–15 % больше битрейта, чем программный libx264 medium, для того же воспринимаемого качества. Добавляйте запас к цели Bitrate при переносе лестницы программного кодера на QSV или повышайте Preset к slower, чтобы закрыть разрыв.
  • Несовпадение Profile и B-Frames. Задание B-Frames выше нуля при H264 Codec Profile baseline даёт либо тихое переопределение, либо нарушение профиля — в зависимости от поколения драйвера. Сопоставляйте оба: baselineB-Frames = 0; main / highB-Frames = 2–4.
  • Open GOP на входе HLS/DASH. Большинство сегментаторов требуют закрытых GOP на границах сегментов. Оставляйте Open GOP выключенным для выходов адаптивного стриминга.

9. Заметки

Этому кодеру нужен процессор Intel с поддержкой QSV или дискретная QSV-способная видеокарта (Intel Arc, Flex). Развёртывания на оборудовании AMD или ARM откатываются к программному кодированию или падают. Оборудование предоставляет только профили baseline, main и high — для high10, high422 или high444 используйте x264. Управления битрейтом CRF нет; для VOD с постоянным качеством кодируйте на ЦПУ через x264. Сопрягайте узел с vf/hwupload выше по потоку, когда предшествующие фильтры процесса живут в памяти ЦПУ.

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