Превью-прокси с адаптивным качеством
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)

Зондирует входящий источник и выставляет значения, нужные для маршрутизации, на отдельные выходные пины. Логика решения ниже по потоку читает эти пины, чтобы классифицировать источник.
Параметры этого примера:
- Selected PINs —
VideoWidth,VideoDAR. Ширина и соотношение сторон при отображении видеопотока источника. Оба питают узел multi-decide, классифицирующий источник в вёдра SD или HD.
Multi-Decide (mdecide)

Классифицирует источник в одно из пяти подписанных вёдер по порогам ширины и DAR. Каждый подписанный выход поднимается, когда его группа решений совпадает. На практике вёдра взаимоисключающие; если не совпало ни одно, Default ELSE condition срабатывает на выход NoDecision, который ниже по потоку направляется в письмо «Wrong file».
Параметры этого примера:
- Default ELSE condition if no decision group conditions are met —
NoDecision. Имя выхода, поднимаемого, когда не совпала ни одна группа решений — используется как триггер ветви отклонения. - Decision Group #1 —
SD4x3—VideoWidth <= 720ANDVideoDAR < 1.4. - Decision Group #2 —
SD16x9—VideoWidth <= 720ANDVideoDAR > 1.4ANDVideoDAR < 1.7. - Decision Group #3 —
HD14x9—VideoWidth > 1280ANDVideoWidth <= 1440ANDVideoDAR < 1.7. - Decision Group #4 —
HD16x9—VideoWidth > 720ANDVideoWidth <= 1280ANDVideoDAR < 1.7. - Decision Group #5 —
FullHD16x9—VideoWidth > 1440ANDVideoWidth >= 1920ANDVideoDAR < 1.7.
Decide (decide)

Шлюзует каждую ветвь лестницы кодирования по выходу multi-decide её ведра. В этом процессе работают пять экземпляров decide — по одному на ведро плюс один для пути отклонения NoDecision.
Параметры этого примера:
- All conditions must me met —
AND. Одноусловные ветви используют AND; ветвь HD 16:9 используетOR, чтобы ведро срабатывало для источников HD 16:9 или Full HD 16:9. - Condition —
SD4x3 = 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 = trueORFullHD16x9 = trueс комбинаторомOR. Срабатывает для любого из двух вёдер HD 16:9, так что они разделяют один путь кодирования ниже по потоку. - Параметры (вариант E — ветвь NoDecision):
NoDecision = trueс комбинаторомAND. Срабатывает, когда источник не совпал ни с одним ведром, направляя его в notify «Wrong file».
Pixel Format (vf/format)

Нормализует отображённое видео к 8-бит 4:2:0 цветовой раскладке перед поветвенными этапами DAR, FPS, масштаба и кодирования. Четыре экземпляра разделяют идентичные параметры — по одному на ветвь кодирования.
Параметры этого примера:
- Format —
yuv420p. 8-бит 4:2:0 планарный Y′CbCr — цветовая раскладка, которую x264 ожидает для выходов H.264 MP4.
DAR (vf/dar)

Штампует целевое соотношение сторон при отображении на ветвь. Каждая ветвь задаёт свой DAR перед этапом масштаба.
Параметры этого примера:
- Aspect Ratio —
4: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)

Приводит видео к фиксированной частоте кадров перед кодером. Четыре экземпляра разделяют идентичные параметры — по одному на ветвь кодирования.
Параметры этого примера:
- Frame Rate —
25/1. 25 кадров в секунду, совпадает с базовой частотой европейского вещания и прокси.
Scale (vf/scale)

Изменяет размер видео ветви до целевого растра перед x264. Разрешение различается по вёдрам, чтобы размер кадра прокси совпадал с классом источника, никогда не увеличивая сверх 720p.
Параметры этого примера:
- Resolution —
640x480. Растр прокси 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)

Пересэмплирует аудио источника к фиксированной частоте перед сведением и кодером AAC. Один общий аудиопуть питает каждую ветвь MP4, поэтому аудио пересэмплируется лишь раз.
Параметры этого примера:
- Rate —
48000Hz. Частота дискретизации, которую AAC кодирует нативно для вещательных и потоковых прокси.
Stereo (af/stereo)
Сводит пересэмплированное аудио в стереопару, затем питает кодер AAC. У узла нет редактируемых параметров — выбор его на холсте не открывает формы.
x264 (x264)

Кодирует поветвенно нормализованное, масштабированное видео 25 кадров/с как H.264 перед мультиплексором MP4. В этом процессе работают четыре экземпляра — два SD-класса на 600 кбит/с ABR и два HD-класса на 1200 кбит/с ABR.
Параметры этого примера:
- H264 Codec Profile —
high. High profile даёт кодеру доступ к B-кадрам, CABAC и преобразованиям 8×8 — инструментам кодирования, которые поддерживает цель доставки прокси. - Preset —
medium. Компромисс скорость/качество по умолчанию. - H264 Codec Level —
4.1. Ограничивает максимальный битрейт и размер кадра уровнем, ожидаемым мейнстримными декодерами H.264. - Rate Control —
ABR. Средний битрейт; позволяет x264 тратить лишние биты на сложные сцены, пока скользящее среднее держится у цели. - Bitrate —
600kbps. Средний видеобитрейт для прокси SD. - Max bitrate —
2400kbps. Пиковый потолок. В паре с Buffer size ограничивает окно контроля битрейта, чтобы сложная сцена не вытолкнула прокси за потолок. - Buffer size —
2400kbps. Буфер VBV, который контроллеру битрейта разрешено заполнить, прежде чем он должен вернуться к среднему. - B-Frames —
3. До трёх подряд идущих B-кадров на GOP. - Reference Frames —
3. Три опорных кадра, доступных оценке движения. - Параметры (вариант B — кодер SD 16:9): идентичны представительному кодеру SD 4:3.
- Параметры (вариант C — кодер HD 14:9): Bitrate
1200kbps, Max bitrate4800kbps, Buffer size4800kbps, Key Interval50. Один ключевой кадр каждые две секунды при 25 кадрах/с — разумная цель для сегментирования или перемотки на HD-прокси ниже по потоку. - Параметры (вариант D — кодер HD 16:9 / Full HD): Bitrate
1200kbps, Max bitrate4800kbps, Buffer size4800kbps, Key Interval50. Идентичны варианту C.
Полный список параметров и компромиссов см. в x264.
AAC (aac)

Кодирует пересэмплированное стереоаудио как AAC перед каждым мультиплексором MP4. Единый экземпляр AAC разделяется всеми четырьмя ветвями кодирования — мультиплексоры подхватывают тот же аудиопоток.
Параметры этого примера:
- Bitrate —
128kbps. Стандартный стереобитрейт AAC для доставки прокси.
Полный список параметров и компромиссов см. в AAC.
MP4 (mp4)

Мультиплексирует поветвенное видео x264 с общим аудио AAC в поставку MP4. В этом процессе работают четыре экземпляра mp4, по одному на ветвь кодирования; все четыре разделяют параметры по умолчанию.
Параметры этого примера:
- Filename — пусто. Мультиплексор выводит имя файла из контекста выше по потоку. Все четыре экземпляра MP4 оставлены на значениях по умолчанию.
Полный список параметров и компромиссов см. в MP4.
Notify (notify)

Отправляет письмо по SMTP в конце каждой ветви. Тело сообщения использует шаблонный синтаксис платформы, поэтому имя пакета и финальный URL подставляются в момент отправки. В этом процессе работают пять экземпляров notify: четыре уведомления об успехе (по одному на ветвь кодирования, запускаемые выходом URL загрузки и выходом Package у mp4) и одно уведомление об отклонении (запускаемое decide ветви NoDecision).
Параметры этого примера:
- SMTP Server — хост почтового сервера, через который отправляется сообщение. Включите Exchange, когда сервер — это конечная точка Microsoft Exchange.
- Username — логин для аутентификации на SMTP-сервере.
- Password — пароль в паре с Username.
- To — список адресатов через запятую.
- Subject —
Encode finished. Фиксированная тема для уведомлений об успехе, отправляемых на каждой ветви, как только завершается её шаг загрузки. - Message —
File {{ Package }} encoded.\nWritten to {{ URL }}.. Токен{{ Package }}раскрывается в имя готового пакета, а{{ URL }}— в назначение загрузки. - Exchange — включён для уведомлений об успехе.
- Параметры (вариант B — notify отклонения на ветви NoDecision): Subject
Wrong file, MessageUnsupported file\n{{ Package }}, Exchange выключен. Срабатывает, когда источник не совпал ни с одним ведром multi-decide; на этой ветви MP4 не создаётся.
7. Запуск
- Откройте Процессы → Создать и либо соберите граф выше, либо импортируйте шаблон лестницы превью-прокси.
- Задайте
$Inравным URL исходного видео, а$Out— URL, куда должен попасть каждый готовый MP4. - Нажмите Запустить либо привяжите процесс к папке мониторинга для автоматической обработки.
- Отслеживайте ход на странице Задачи; по одному MP4 на совпавший класс попадает на URL, заданный в
$Out, и на каждую ветвь приходит письмо об успехе. Если источник не совпал ни с одним классом, вместо этого приходит письмо об отклонении и MP4 не создаётся.
8. Варианты
- Добавляйте или убирайте группы multi-decide, чтобы расширить сеть классификации — например, ведро 4K, зажатое на
VideoWidth >= 3840, и соответствующую ветвьvfscale → x264ниже по потоку. - Поднимите ветви SD до более высокого битрейта (или опустите ветви HD), чтобы перебалансировать качество прокси против стоимости хранения; поля Bitrate, Max bitrate и Buffer size на каждом x264 масштабируются вместе.
- Уберите ветвь NoDecision и notify «Wrong file», когда приём выше по потоку уже отсеивает неподдерживаемые источники, оставив только четыре ветви успеха.