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

Last updated

Трёхуровневая лестница MP4 (LQ / MQ / HQ)

1. Что создаёт этот процесс

Три поставки MP4, выдаваемые параллельно из одного источника: низкокачественное прокси 448×252 на 400 кбит/с двухпроходного H.264, среднее 640×360 на 780 кбит/с однопроходного CBR и высокое 1920×1080 на 3000 кбит/с ABR. Имя выходного файла каждого уровня задаётся переменной процесса ($LQ_Filename, $MQ_Filename, $HQ_Filename), так что оператор может назвать каждый уровень независимо на этапе выполнения, а не зашивать имена файлов в граф.

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

  • Вы публикуете лестницу распространения (LQ-прокси / MQ-веб / HQ-мастер) и хотите каждый уровень за один проход, чтобы кодирования гарантированно разделяли кадр источника, аудиодорожку и цветовой конвейер.
  • Вы передаёте предварительные мастеры упаковщику OTT, который ожидает входы H.264 MP4 на трёх уровнях качества и принимает тройку файлов под выбранными оператором именами.
  • Вы принимаете в контент-библиотеку, которая хранит дельты LQ / MQ / HQ для каждого ассета, и хотите имена файлов, привязанные к ID каталога, а не сгенерированные отдельным шагом именования ниже по потоку.
  • Нужно дружественное к папке мониторинга транскодирование, где каждая задача параметризуется в момент отправки — три переменные имён файлов и есть единственные регуляторы, которые оператор крутит на ассет.

3. Входы

  • Исходный файл — любой контейнер и кодек, которые платформа может демультиплексировать, с одной видеодорожкой и хотя бы одной аудиодорожкой. Источники со смешанным соотношением сторон дополняются пиллербоксом или леттербоксом цветовым конвейером выше кодеров; процесс предполагает, что источник уже дополнен до 16:9 или что растр источника совпадает.
  • Файл логотипа — кадр или короткий клип, читаемый в узел Overlay и вжигаемый в видео каждого уровня. Подайте прозрачный PNG под размер уровня с наименьшим растром; узел наложения центрирует его по умолчанию.
  • Переменные:
    • $Download — URL исходного видео.
    • $Logo_path — URL ассета логотипа.
    • $LQ_Filename — имя выходного файла для LQ MP4. Задавайте на задачу (например, asset_1234_LQ.mp4); узел Set Var присваивает его в пул переменных, и мультиплексор LQ MP4 читает его.
    • $MQ_Filename — имя выходного файла для MQ MP4.
    • $HQ_Filename — имя выходного файла для HQ MP4.
    • $Out_filename — базовое имя файла, из которого узлы Eval выводят имя файла каждого уровня ({{ Out_filename }}_LQ.mp4 и так далее). Используйте, когда хотите, чтобы оператор подавал одно базовое имя, а три имени файлов уровней генерировались автоматически; оставьте пустым и подайте $LQ_Filename / $MQ_Filename / $HQ_Filename напрямую, чтобы пропустить вывод.
    • $Upload, $upload1, $upload2 — URL назначений, по одному на узел Upload, принимающие готовые MP4.

4. Выход

  • Файл LQ — контейнер MP4, 448×252 H.264 High на уровне 3.0, двухпроходный CBR на 400 кбит/с, дистанция B-кадров 2 кадра, GOP 50 кадров, цветовая сигнализация BT.709. Стереозвук AAC на 48 кГц, 160 кбит/с. Имя файла задаётся $LQ_Filename.
  • Файл MQ — контейнер MP4, 640×360 H.264 High на уровне 3.0, однопроходный CBR на 780 кбит/с, GOP 50 кадров, цветовая сигнализация BT.709. Стерео AAC на 48 кГц, 160 кбит/с. Имя файла задаётся $MQ_Filename.
  • Файл HQ — контейнер MP4, 1920×1080 H.264 High на уровне 4.0, однопроходный ABR на 3000 кбит/с с maxrate 8000 кбит/с и буфером 8000 кбит/с, GOP 50 кадров, цветовая сигнализация BT.709. Стерео AAC на 48 кГц, 160 кбит/с. Имя файла задаётся $HQ_Filename.
  • Назначения — каждый пакет MP4 отправляется через узел Upload на URL, настроенный на этом узле ($Upload, $upload1, $upload2).

5. Обзор процесса

Процесс трёхуровневой лестницы MP4 на холсте

Источник забирается из $Download и разделяется на аудио и видео. Аудио приводится один раз — преобразуется в s16, пересэмплируется до 48 кГц, кодируется как AAC на 160 кбит/с — и полученный стереопоток AAC разделяется всеми тремя мультиплексорами MP4. Видеопуть разводится веером в три параллельные ветви, разделяющие одни этапы формирования (цветность yuv420p, 25 кадров/с, деинтерлейсинг yadif, соотношение сторон при отображении 16:9, наложение логотипа из $Logo_path) и различающиеся только целевым растром Scale — 448×252 для LQ, 640×360 для MQ, 1920×1080 для HQ. Каждая ветвь передаёт сформированное видео своему экземпляру x264, настроенному под битрейт и профиль контроля битрейта уровня, затем своему мультиплексору MP4. Параллельно цепочке кодирования три пары Eval + Set Var выводят три имени файлов уровней из $Out_filename ({{ Out_filename }}_LQ.mp4, _MQ.mp4, _HQ.mp4) и сохраняют их в $LQ_Filename / $MQ_Filename / $HQ_Filename; три мультиплексора MP4 затем подставляют эти переменные в своё поле Filename. Три готовых пакета загружаются независимо.

6. Настройка по узлам

Set Var (setvar)

Форма «Set Var Edit properties»

Сохраняет значение в переменную процесса, чтобы более поздние узлы могли его прочитать. В этом процессе работают три экземпляра, по одному на имя файла уровня; каждый берёт строку, произведённую узлом Eval выше по потоку на своём входе Value, и присваивает её переменной, названной в форме. Переменная затем доступна каждому узлу ниже по потоку в графе как $<Name> — так три мультиплексора MP4 подхватывают имена файлов своих уровней, не зашивая эти значения в сам узел MP4.

Параметры этого примера:

  • Node Label — пусто. Свободная подпись, печатаемая на плитке холста; задавайте, когда несколько узлов Set Var разделяют граф.
  • NameHQ_Filename. Переменная, которой присваивается результат выражения Eval выше по потоку; мультиплексор HQ MP4 затем читает её обратно как $HQ_Filename в своём поле Filename. Поле — это селектор, перечисляющий каждую переменную, объявленную в процессе (для ясности в выпадающем списке показан префикс $), поэтому переменная должна уже существовать в списке переменных процесса, прежде чем Set Var сможет на неё нацелиться.

Параметры (вариант MQ_Filename):

  • NameMQ_Filename. Та же форма, что и у экземпляра HQ, в паре с Eval, выдающим {{ Out_filename }}_MQ.mp4, и читаемая обратно мультиплексором MQ MP4.

Параметры (вариант LQ_Filename):

  • NameLQ_Filename. В паре с Eval LQ и читаемая мультиплексором LQ MP4.

Eval (eval)

Форма «Eval Edit properties»

Вычисляет шаблон в стиле Jinja относительно контекста переменных процесса и выдаёт результат на свой выход Value. В этом процессе работают три экземпляра, по одному на уровень; каждый получает исходный пакет на входе A (чтобы его выражение видело данные зондирования и переменные процесса в одном контексте), и каждый питает узел Set Var, записывающий результат в переменную имени файла уровня.

Параметры этого примера:

  • Node LabelHQ filename. Свободная подпись, печатаемая на плитке холста; задавайте, когда несколько узлов Eval разделяют граф, чтобы читающий с одного взгляда понимал, что вычисляет каждый.
  • Expression{{ Out_filename }}_HQ.mp4. Сцепляет базовое имя файла, поданное в $Out_filename, с литералом-суффиксом _HQ.mp4. Синтаксис с двойными скобками — в стиле Jinja: каждый идентификатор в {{ … }} ищется в контексте процесса, так что можно ссылаться на любую переменную $ или любое поле A.Probe.* пакета выше по потоку без кавычек.

Параметры (вариант MQ filename):

  • Node LabelMQ filename.
  • Expression{{ Out_filename }}_MQ.mp4. Та же форма, что и у экземпляра HQ, с другим литералом-суффиксом.

Параметры (вариант LQ filename):

  • Node LabelLQ filename.
  • Expression{{ Out_filename }}_LQ.mp4. Та же форма с суффиксом LQ.

x264 (x264)

Форма «x264 Edit properties»

Кодирует подготовленное видео в H.264. Работают три экземпляра, по одному на уровень; форма выше показывает уровень HQ. Каждый экземпляр разделяет одну цветовую сигнализацию (основные цвета, передача и матрица BT.709), один интервал ключевых кадров 50 кадров и одну дистанцию B-кадров 2 кадра — между уровнями различаются только растр (задаётся на Scale выше), бюджет битрейта и режим контроля битрейта.

Параметры этого примера (вариант HQ — 1920×1080 на 3000 кбит/с ABR):

  • H264 Codec Profilehigh. Профиль H.264, отгружающий цветность 4:2:0 на 8 бит с самой широкой поддержкой плееров и эффективностью, на которую полагается каждый современный декодер.
  • Presetsuperfast. Меняет эффективность сжатия на пропускную способность кодера; на 3000 кбит/с визуальная цена мала, а ускорение важно, когда мастер-кодирование идёт по длинному источнику.
  • H264 Codec Level4. Требуется растром 1920×1080 и максимальным битрейтом 3000 кбит/с.
  • Rate ControlABR. Режим среднего битрейта с жёстким потолком; даёт более плотный размер файла, чем CBR, при той же номинальной скорости, позволяя кодеру тратить биты там, где картинке нужно.
  • Bitrate3000 kbps. Целевое среднее для уровня HQ.
  • Max bitrate8000 kbps. Потолок мгновенного битрейта; в паре с буфером ниже.
  • Buffer size8000 kbps. Буфер VBV, который в паре с Max bitrate; кодер держится в потолке на скользящем окне этого размера.
  • Key Interval50. Принудительный IDR-ключевой кадр каждые 50 кадров (2 с при 25 кадрах/с); стандарт для упаковщиков ниже по потоку, привязывающих сегменты к границам ключевых кадров.
  • B-Frames2. До 2 подряд идущих B-кадров между опорными — значение H.264 ABR по умолчанию для веб-кодирований среднего качества.
  • Reference Frames3. 3 опорных кадра на этом профиле; поднимите для контента с медленным движением, опустите, когда бюджет CPU ограничен.
  • Color Space / Color Transfer / Color Primariesbt709. Теги HD-вещательной цветовой сигнализации, записанные в битстрим, чтобы декодер применил правильную матрицу при воспроизведении.

Параметры (вариант LQ — 448×252 на 400 кбит/с двухпроходный):

  • H264 Codec Level3. Требуется растром 448×252.
  • Presetmedium. Жертвует скоростью кодирования ради эффективности сжатия на низком битрейте, где важен каждый сэкономленный байт.
  • Rate ControlCBR. Режим постоянного битрейта; держит LQ-прокси на предсказуемой скорости для миниатюрных / превью-транспортов.
  • Bitrate400 kbps.
  • Two Pass — включён. Два прохода кодирования; первый анализирует сложность, второй распределяет биты на основе этого анализа. Удвоенное время кодирования оправдано на 400 кбит/с, поскольку у прокси нет запаса битрейта, чтобы замаскировать однопроходную догадку.
  • Reference Frames2.

Параметры (вариант MQ — 640×360 на 780 кбит/с однопроходный CBR):

  • H264 Codec Level3.
  • Presetmedium.
  • Rate ControlCBR.
  • Bitrate780 kbps.
  • Reference Frames2.

Полный список параметров и компромиссов см. в x264.

AAC (aac)

Форма «AAC Edit properties»

Кодирует подготовленное аудио один раз и разделяет закодированный поток AAC между всеми тремя мультиплексорами MP4. Одно аудиокодирование дешевле трёх идентичных и гарантирует побайтово одинаковое аудио по всем уровням, что упрощает A/B-сравнение.

Параметры этого примера:

  • Bitrate160 kbps. Стерео AAC-LC на 48 кГц; комфортный запас для музыки и голоса без раздувания размера файла.

Полный список параметров и компромиссов см. в aac.

MP4 (mp4)

Форма «MP4 Edit properties»

Мультиплексирует закодированные видео H.264 и общее аудио AAC в контейнер MP4. Работают три экземпляра, по одному на уровень; каждый читает имя файла уровня из переменной процесса, заполненной выше по потоку парой Eval + Set Var, так что три мультиплексора разделяют идентичный шаблон формы и различаются только тем, на какую переменную ссылаются.

Параметры этого примера (вариант HQ):

  • Node LabelHQ. Подпись на холсте, различающая три уровня; косметическая.
  • Filename$HQ_Filename. Переменная, заданная HQ Set Var выше по потоку. Поле — это селектор, перечисляющий каждую переменную, объявленную в процессе (в выпадающем списке для ясности показан префикс $); выберите совпадающую переменную уровня, чтобы готовый файл попал под выбранным оператором именем.

Параметры (вариант MQ — MQ filename):

  • Node LabelMQ.
  • Filename$MQ_Filename.

Параметры (вариант LQ — LQ filename):

  • Node LabelLQ.
  • Filename$LQ_Filename.

Полный список параметров и компромиссов см. в mp4.

Scale (vf/scale)

Форма «Scale Edit properties»

Изменяет размер источника до растра уровня. Три экземпляра Scale — единственный этап формирования, где три цепочки кодирования действительно расходятся — каждый другой видеофильтр применяет идентичные параметры по уровням.

Параметры этого примера (вариант HQ):

  • Resolution1920x1080. Мастер-растр HQ.
  • Sample Aspect Ratio (SAR) — выключено. Исходный SAR оставлен в покое; соотношение сторон при отображении 16:9 идёт с этапа DAR ниже.

Параметры (вариант MQ — растр 640×360):

  • Resolution640x360.

Параметры (вариант LQ — растр 448×252):

  • Resolution448x252.

Полный список параметров и компромиссов см. в vf/scale.

DAR (vf/dar)

Форма «DAR Edit properties»

Помечает видео соотношением сторон при отображении 16:9, чтобы плеер рисовал кадр правильно независимо от того, как источник сигнализировал своё соотношение. Работают три экземпляра, по одному на ветвь, все настроены одинаково.

Параметры этого примера:

  • Aspect Ratio16:9. Стандартное HD-широкоэкранное.

Pixel Format (vf/format)

Форма «Pixel Format Edit properties»

Преобразует видео к 8-бит 4:2:0 цветности, которую H.264 кодирует нативно. Три экземпляра работают по ветвям, все идентичны.

Параметры этого примера:

  • Formatyuv420p. 8-бит планарный Y′CbCr с субдискретизацией цветности 4:2:0 — раскладка цветности, которую поддерживает каждый потребительский декодер H.264.

FPS (vf/fps)

Форма «FPS Edit properties»

Фиксирует видео на постоянной частоте кадров перед кодером. Работают три экземпляра, все идентичны.

Параметры этого примера:

  • Frame Rate25/1. 25 прогрессивных кадров в секунду; в паре с Key Interval 50 кадров на x264 даёт IDR-ритм 2 с.

Deinterlace (vf/deinterlace)

Форма «Deinterlace Edit properties»

Убирает чересстрочность из вещательного или ленточного источника, чтобы выход H.264 был прогрессивным. Работают три экземпляра, все настроены одинаково.

Параметры этого примера:

  • Deinterlacing Algorithmyadif. Стандартный алгоритм yet-another-deinterlace-filter; широко используется и предсказуем.
  • Interlacing Modesend_frame. Выдавать один выходной кадр на входной кадр; альтернатива send_field удваивает выходную частоту и является неверным выбором, когда кодер ниже по потоку ожидает 25 кадров/с.

Overlay (vf/overlay)

Форма «Overlay Edit properties»

Вжигает логотип, забранный из $Logo_path, в видео перед кодером. Работают три экземпляра, по одному на ветвь; все оставлены на значениях по умолчанию (логотип центрирован).

Параметры этого примера:

  • X — пусто. Размещение по горизонтали по умолчанию (центрировано на выходном кадре).
  • Y — пусто. Размещение по вертикали по умолчанию.

Sample Format (af/aformat)

Форма «Sample Format Edit properties»

Преобразует формат сэмплов аудио перед пересэмплером и кодером AAC. Один af/aformat работает на общей аудиоцепочке.

Параметры этого примера:

  • Formats16. 16-битные знаковые целочисленные сэмплы; канонический входной формат AAC.

Sample Rate (af/aresample)

Форма «Sample Rate Edit properties»

Пересэмплирует аудио до 48 кГц, чтобы кодер AAC видел фиксированную частоту независимо от источника.

Параметры этого примера:

  • Rate48000 Hz. Стандартная для вещания и OTT частота дискретизации; чисто сочетается с AAC на 160 кбит/с стерео.

7. Запуск

  1. Откройте Процессы → Создать и либо соберите граф выше, либо импортируйте шаблон трёхуровневой лестницы MP4.
  2. Задайте $Download равным URL исходного видео, а $Logo_path — URL ассета логотипа.
  3. Выберите один из двух операторских сценариев для имён файлов уровней:
    • Напрямую. Задайте $LQ_Filename, $MQ_Filename и $HQ_Filename равными трём полным именам файлов, которые хотите (asset_LQ.mp4 и так далее). Оставьте $Out_filename пустым; три выражения Eval дадут пустые результаты, а узлы Set Var станут холостыми, оставив ваши прямые значения на месте.
    • С выводом. Задайте $Out_filename равным базовому имени (asset_1234); три узла Eval добавят _LQ.mp4, _MQ.mp4 и _HQ.mp4, а узлы Set Var запишут результаты в три переменные имён файлов уровней.
  4. Задайте $Upload, $upload1 и $upload2 равными URL назначений для трёх уровней.
  5. Нажмите Запустить либо привяжите процесс к папке мониторинга для автоматической обработки. Готовые MP4 появятся по URL загрузки, когда задача завершится.

8. Варианты

  • Скорректируйте Bitrate на каждом уровне x264 независимо, чтобы перенацелить лестницу; остальная часть графа переносится без изменений.
  • Переключите Rate Control на HQ x264 с ABR на CRF ради мастер-кодирования с фиксированным качеством; уровни LQ и MQ остаются на CBR/ABR ради предсказуемого профиля размера файла.
  • Добавьте четвёртый уровень, продублировав любую из ветвей Scale → x264 → MP4, объявив дополнительную переменную $XQ_Filename и добавив совпадающую пару Eval + Set Var ({{ Out_filename }}_XQ.mp4).
  • Уберите этап Overlay на каждой ветви, если поставка не должна нести водяной знак; ветви сворачиваются в пятиэтапную цепочку фильтров.

9. Связанное

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