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

Last updated

Превью-прокси с адаптивным качеством

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

Создаёт мультибитрейтные превью/прокси-файлы MP4 из одного источника, с путём кодирования, выбираемым автоматически на основе проанализированных характеристик источника, и почтовыми уведомлениями об успехе или неудаче.

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

  • У вас конвейер контроля качества контента, которому нужно смотрибельное прокси для каждого приёма независимо от исходного размера — SD, HD или что угодно между ними — без выбора оператором правильного пресета под каждый ассет.
  • Вы генерируете превью-лестницы приёма для дашборда ревью или плейаута и хотите единообразные прокси 25 кадров/с, 16:9 (или 4:3), подобранные под класс источника.
  • Вы применяете правило маршрутизации «перекодировать если HD, перекодировать со снижением если SD» и хотите, чтобы процесс прервался и уведомил, когда вход не вписывается ни в один ожидаемый класс.
  • Вы отправляете подтверждения по почте на каждое кодирование команде эксплуатации, чтобы она забрала готовый файл сразу после загрузки или среагировала, когда источник отклонён.

3. Входы

  • Исходное видео — любой контейнер и кодек, которые платформа может демультиплексировать. Процесс зондирует ширину и соотношение сторон при отображении источника, чтобы выбрать правильный путь кодирования, поэтому источник не обязан заранее принадлежать какому-то конкретному классу.
  • Переменные:
    • $In — URL исходного видео.
    • $Out — URL, куда записывается каждый готовый MP4.

4. Выход

  • Файлы — один MP4 на совпавший класс. Каждый MP4 содержит видеодорожку H.264 и стереодорожку AAC на 128 кбит/с, зафиксированные на 25 кадрах/с и пиксельной раскладке yuv420p.
    • SD 4:3 — 640×480 на 600 кбит/с ABR (потолок 2400 кбит/с).
    • SD 16:9 — 640×360 на 600 кбит/с ABR (потолок 2400 кбит/с).
    • HD 14:9 — 1280×720 на 1200 кбит/с ABR (потолок 4800 кбит/с).
    • HD 16:9 / Full HD 16:9 — 1280×720 на 1200 кбит/с ABR (потолок 4800 кбит/с).
  • Назначение — каждый созданный MP4 записывается на URL, заданный в $Out.
  • Уведомление — при каждой успешной загрузке отправляется подтверждение по почте с именем пакета и выходным URL, подставленными в тело сообщения. Когда источник не совпадает ни с одним классом, вместо этого отправляется отдельное письмо «Wrong file» и MP4 не создаётся.

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

Процесс превью-прокси с адаптивным качеством на холсте

Источник забирается из $In и зондируется узлом analyze, который выдаёт ширину видео и соотношение сторон при отображении на свои выходные пины. Эти значения текут в multi-decide, который классифицирует источник в одно из пяти вёдер — SD 4:3, SD 16:9, HD 14:9, HD 16:9 или Full HD 16:9 — по порогам ширины и DAR. Каждое ведро зажигает свой шлюз decide; совпавшие пакеты проходят сквозь шлюз, остальные останавливаются. Четыре ветви decide → mapvideo → vf/format → vf/dar → vf/fps → vf/scale → x264 → mp4 работают параллельно — формы расходятся в разрешении масштабирования, целевом DAR и битрейте кодера — а пятый decide срабатывает, когда не совпало ни одно ведро, направляя источник в notify «Wrong file» и не создавая MP4. Параллельно аудио отображается один раз, пересэмплируется до 48 кГц, сводится в стерео и кодируется AAC на 128 кбит/с; единый поток AAC питает каждый из четырёх мультиплексоров MP4. Каждый готовый MP4 загружается на $Out, а notify на каждой ветви отправляет повыходное подтверждение по почте.

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

Analyze (analyze)

Форма «Analyze Edit properties»

Зондирует входящий источник и выставляет значения, нужные для маршрутизации, на отдельные выходные пины. Логика решения ниже по потоку читает эти пины, чтобы классифицировать источник.

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

  • Selected PINsVideoWidth, VideoDAR. Ширина и соотношение сторон при отображении видеопотока источника. Оба питают узел multi-decide, классифицирующий источник в вёдра SD или HD.

Multi-Decide (mdecide)

Форма «Multi-Decide Edit properties»

Классифицирует источник в одно из пяти подписанных вёдер по порогам ширины и DAR. Каждый подписанный выход поднимается, когда его группа решений совпадает. На практике вёдра взаимоисключающие; если не совпало ни одно, Default ELSE condition срабатывает на выход NoDecision, который ниже по потоку направляется в письмо «Wrong file».

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

  • Default ELSE condition if no decision group conditions are metNoDecision. Имя выхода, поднимаемого, когда не совпала ни одна группа решений — используется как триггер ветви отклонения.
  • Decision Group #1 — SD4x3VideoWidth <= 720 AND VideoDAR < 1.4.
  • Decision Group #2 — SD16x9VideoWidth <= 720 AND VideoDAR > 1.4 AND VideoDAR < 1.7.
  • Decision Group #3 — HD14x9VideoWidth > 1280 AND VideoWidth <= 1440 AND VideoDAR < 1.7.
  • Decision Group #4 — HD16x9VideoWidth > 720 AND VideoWidth <= 1280 AND VideoDAR < 1.7.
  • Decision Group #5 — FullHD16x9VideoWidth > 1440 AND VideoWidth >= 1920 AND VideoDAR < 1.7.

Decide (decide)

Форма «Decide Edit properties»

Шлюзует каждую ветвь лестницы кодирования по выходу multi-decide её ведра. В этом процессе работают пять экземпляров decide — по одному на ведро плюс один для пути отклонения NoDecision.

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

  • All conditions must me metAND. Одноусловные ветви используют AND; ветвь HD 16:9 использует OR, чтобы ведро срабатывало для источников HD 16:9 или Full HD 16:9.
  • ConditionSD4x3 = true. Захваченный decide срабатывает, когда выход SD4x3 у multi-decide поднимается.
  • Параметры (вариант B — ветвь SD 16:9): SD16x9 = true с комбинатором AND. Срабатывает, когда источник попадает в ведро SD 16:9.
  • Параметры (вариант C — ветвь HD 14:9): HD14x9 = true с комбинатором AND. Срабатывает, когда источник попадает в ведро HD 14:9.
  • Параметры (вариант D — ветвь HD 16:9 / Full HD): HD16x9 = true OR FullHD16x9 = true с комбинатором OR. Срабатывает для любого из двух вёдер HD 16:9, так что они разделяют один путь кодирования ниже по потоку.
  • Параметры (вариант E — ветвь NoDecision): NoDecision = true с комбинатором AND. Срабатывает, когда источник не совпал ни с одним ведром, направляя его в notify «Wrong file».

Pixel Format (vf/format)

Форма «Pixel Format Edit properties»

Нормализует отображённое видео к 8-бит 4:2:0 цветовой раскладке перед поветвенными этапами DAR, FPS, масштаба и кодирования. Четыре экземпляра разделяют идентичные параметры — по одному на ветвь кодирования.

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

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

DAR (vf/dar)

Форма «DAR Edit properties»

Штампует целевое соотношение сторон при отображении на ветвь. Каждая ветвь задаёт свой DAR перед этапом масштаба.

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

  • Aspect Ratio4:3. Соотношение сторон при отображении для ветви SD 4:3.
  • Параметры (вариант B — ветвь SD 16:9): 16:9.
  • Параметры (вариант C — ветвь HD 14:9): 16:9 — ведро названо по доставке 14:9 с защитной зоной, но DAR контейнера остаётся 16:9.
  • Параметры (вариант D — ветвь HD 16:9 / Full HD): 16:9.

FPS (vf/fps)

Форма «FPS Edit properties»

Приводит видео к фиксированной частоте кадров перед кодером. Четыре экземпляра разделяют идентичные параметры — по одному на ветвь кодирования.

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

  • Frame Rate25/1. 25 кадров в секунду, совпадает с базовой частотой европейского вещания и прокси.

Scale (vf/scale)

Форма «Scale Edit properties»

Изменяет размер видео ветви до целевого растра перед x264. Разрешение различается по вёдрам, чтобы размер кадра прокси совпадал с классом источника, никогда не увеличивая сверх 720p.

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

  • Resolution640x480. Растр прокси SD 4:3.
  • Sample Aspect Ratio (SAR) — выключено. Соотношение сторон при отображении уже зафиксировано этапом vf/dar выше, поэтому путь подстройки SAR остаётся выключенным.
  • Параметры (вариант B — ветвь SD 16:9): 640x360.
  • Параметры (вариант C — ветвь HD 14:9): 1280x720.
  • Параметры (вариант D — ветвь HD 16:9 / Full HD): 1280x720 — ветви HD 14:9 и HD 16:9 разделяют ту же цель 720p; они различаются условием decide выше по потоку и штампом DAR, а не масштабом.

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

Sample Rate (af/aresample)

Форма «Sample Rate Edit properties»

Пересэмплирует аудио источника к фиксированной частоте перед сведением и кодером AAC. Один общий аудиопуть питает каждую ветвь MP4, поэтому аудио пересэмплируется лишь раз.

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

  • Rate48000 Hz. Частота дискретизации, которую AAC кодирует нативно для вещательных и потоковых прокси.

Stereo (af/stereo)

Сводит пересэмплированное аудио в стереопару, затем питает кодер AAC. У узла нет редактируемых параметров — выбор его на холсте не открывает формы.

x264 (x264)

Форма «x264 Edit properties»

Кодирует поветвенно нормализованное, масштабированное видео 25 кадров/с как H.264 перед мультиплексором MP4. В этом процессе работают четыре экземпляра — два SD-класса на 600 кбит/с ABR и два HD-класса на 1200 кбит/с ABR.

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

  • H264 Codec Profilehigh. High profile даёт кодеру доступ к B-кадрам, CABAC и преобразованиям 8×8 — инструментам кодирования, которые поддерживает цель доставки прокси.
  • Presetmedium. Компромисс скорость/качество по умолчанию.
  • H264 Codec Level4.1. Ограничивает максимальный битрейт и размер кадра уровнем, ожидаемым мейнстримными декодерами H.264.
  • Rate ControlABR. Средний битрейт; позволяет x264 тратить лишние биты на сложные сцены, пока скользящее среднее держится у цели.
  • Bitrate600 kbps. Средний видеобитрейт для прокси SD.
  • Max bitrate2400 kbps. Пиковый потолок. В паре с Buffer size ограничивает окно контроля битрейта, чтобы сложная сцена не вытолкнула прокси за потолок.
  • Buffer size2400 kbps. Буфер VBV, который контроллеру битрейта разрешено заполнить, прежде чем он должен вернуться к среднему.
  • B-Frames3. До трёх подряд идущих B-кадров на GOP.
  • Reference Frames3. Три опорных кадра, доступных оценке движения.
  • Параметры (вариант B — кодер SD 16:9): идентичны представительному кодеру SD 4:3.
  • Параметры (вариант C — кодер HD 14:9): Bitrate 1200 kbps, Max bitrate 4800 kbps, Buffer size 4800 kbps, Key Interval 50. Один ключевой кадр каждые две секунды при 25 кадрах/с — разумная цель для сегментирования или перемотки на HD-прокси ниже по потоку.
  • Параметры (вариант D — кодер HD 16:9 / Full HD): Bitrate 1200 kbps, Max bitrate 4800 kbps, Buffer size 4800 kbps, Key Interval 50. Идентичны варианту C.

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

AAC (aac)

Форма «AAC Edit properties»

Кодирует пересэмплированное стереоаудио как AAC перед каждым мультиплексором MP4. Единый экземпляр AAC разделяется всеми четырьмя ветвями кодирования — мультиплексоры подхватывают тот же аудиопоток.

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

  • Bitrate128 kbps. Стандартный стереобитрейт AAC для доставки прокси.

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

MP4 (mp4)

Форма «MP4 Edit properties»

Мультиплексирует поветвенное видео x264 с общим аудио AAC в поставку MP4. В этом процессе работают четыре экземпляра mp4, по одному на ветвь кодирования; все четыре разделяют параметры по умолчанию.

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

  • Filename — пусто. Мультиплексор выводит имя файла из контекста выше по потоку. Все четыре экземпляра MP4 оставлены на значениях по умолчанию.

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

Notify (notify)

Форма «Notify Edit properties»

Отправляет письмо по SMTP в конце каждой ветви. Тело сообщения использует шаблонный синтаксис платформы, поэтому имя пакета и финальный URL подставляются в момент отправки. В этом процессе работают пять экземпляров notify: четыре уведомления об успехе (по одному на ветвь кодирования, запускаемые выходом URL загрузки и выходом Package у mp4) и одно уведомление об отклонении (запускаемое decide ветви NoDecision).

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

  • SMTP Server — хост почтового сервера, через который отправляется сообщение. Включите Exchange, когда сервер — это конечная точка Microsoft Exchange.
  • Username — логин для аутентификации на SMTP-сервере.
  • Password — пароль в паре с Username.
  • To — список адресатов через запятую.
  • SubjectEncode finished. Фиксированная тема для уведомлений об успехе, отправляемых на каждой ветви, как только завершается её шаг загрузки.
  • MessageFile {{ Package }} encoded.\nWritten to {{ URL }}.. Токен {{ Package }} раскрывается в имя готового пакета, а {{ URL }} — в назначение загрузки.
  • Exchange — включён для уведомлений об успехе.
  • Параметры (вариант B — notify отклонения на ветви NoDecision): Subject Wrong file, Message Unsupported file\n{{ Package }}, Exchange выключен. Срабатывает, когда источник не совпал ни с одним ведром multi-decide; на этой ветви MP4 не создаётся.

7. Запуск

  1. Откройте Процессы → Создать и либо соберите граф выше, либо импортируйте шаблон лестницы превью-прокси.
  2. Задайте $In равным URL исходного видео, а $Out — URL, куда должен попасть каждый готовый MP4.
  3. Нажмите Запустить либо привяжите процесс к папке мониторинга для автоматической обработки.
  4. Отслеживайте ход на странице Задачи; по одному MP4 на совпавший класс попадает на URL, заданный в $Out, и на каждую ветвь приходит письмо об успехе. Если источник не совпал ни с одним классом, вместо этого приходит письмо об отклонении и MP4 не создаётся.

8. Варианты

  • Добавляйте или убирайте группы multi-decide, чтобы расширить сеть классификации — например, ведро 4K, зажатое на VideoWidth >= 3840, и соответствующую ветвь vfscale → x264 ниже по потоку.
  • Поднимите ветви SD до более высокого битрейта (или опустите ветви HD), чтобы перебалансировать качество прокси против стоимости хранения; поля Bitrate, Max bitrate и Buffer size на каждом x264 масштабируются вместе.
  • Уберите ветвь NoDecision и notify «Wrong file», когда приём выше по потоку уже отсеивает неподдерживаемые источники, оставив только четыре ветви успеха.

9. Связанное

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