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

Last updated

eval

Узел eval в центре холста, принимающий входы-пакеты A и B и отдающий один пин Value.

1. Сводка

Вычисляет выражение в стиле Jinja против переменных процесса и метаданных пакета выше по потоку, отдавая одно вычисленное Value на выходе. Используйте его для вывода имён файлов, расчёта условных значений, классификации источника по именованным корзинам и питания setvar или decide ниже по потоку.

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

  • Вывод имени выходного файла из имени источника — {{ A|basename|splitext|first }}_New.mp4 отсекает расширение входа и добавляет суффикс для поставки.
  • Расчёт условного значения — отображение A.Probe.AudioCount в строковую метку (NoAudio / OneAudio / MoreAudio), чтобы decide ниже по потоку маршрутизировал по метке, а не переписывал тот же Jinja в каждой ветви.
  • Маршрутизация на основе выражений — построение классификации один раз и разводка веером трёх или более узлов decide, каждый из которых сравнивает то же значение eval с другой константой.
  • Вывод выбора битрейта, растра или формата — расчёт нужной настройки кодера из инспектированных свойств и передача её через setvar в переменную, потребляемую параметром узла ниже по потоку.

3. Входы

  • Входы-переменные (динамические) — по одному входному пину на каждый идентификатор верхнего уровня, упомянутый в выражении. Образцовый процесс ссылается на A, поэтому на холсте появляется пин с именем A; выражение, также ссылающееся на B, выведет и пин B. Каждый пин несёт значение выше по потоку (обычно core.Package), чьи свойства выражение читает через A.Probe.AudioCount, A|basename и так далее.

    Совместимые узлы выше по потоку (на пин):

    • download — исходный пакет; выражения затем читают из него A.Probe.* и A|basename.
    • analyze — когда выражению нужен инспектированный скаляр (в стиле A == VideoHeight); подключите соответствующий инспекционный пин во вход-переменную.
    • eval — цепляет второе вычисление на результате первого.

4. Выходы

  • Valuestring. Вычисленный результат выражения, отрисованный как строка. Сравнения ниже по потоку по умолчанию трактуют его как текст; используйте фильтры преобразования Jinja в самом выражении, если нужно числовое значение.

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

    • setvar — сохраняет вычисленное значение в переменную процесса, на которую могут ссылаться поля параметров других узлов.
    • decide — маршрутизирует по строковому сравнению с вычисленным значением.
    • mdecide — N-путевая классификация по вычисленному значению.

5. Параметры

Форма «eval Node Settings» с полем Expression в виде редактора CodeMirror с подсветкой синтаксиса Jinja.

Форма «Настройки» содержит подпись и одно поле выражения.

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

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

    • Что задаёт. Подпись на плитке; на выражение не влияет.
    • Когда менять. Задавайте, чтобы кратко описать, что вычисляет выражение (Filename suffix, Audio classifier), чтобы холст читался как подписанный поток.
  • Expression (string, по умолчанию пусто, обязательно)

    Выражение в стиле Jinja, вычисляемое во время выполнения. Отрисовывается в редакторе CodeMirror с номерами строк и подсветкой синтаксиса.

    • Что задаёт. Вычисление. Используйте Jinja {% if %} / {% elif %} / {% else %} для условных значений, каналы |filter для преобразований имён файлов и строк (basename, splitext, first, replace) и доступ через точку для вложенных свойств (A.Probe.AudioCount).
    • Когда менять. Правьте на каждом процессе — поле пусто по умолчанию. Ссылайтесь на каждую переменную выше по потоку по имени пина на холсте (A, B, …); список идентификаторов редактора определяет, какие входные пины выводит узел.
    • Обязательно. да.

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

JSON-ключ Название поля
expr Expression

6. Пример

Процесс AVC-Intra MXF broadcast mezzanine на холсте

Полный разбор — переменные, настройка каждого узла и ожидаемый результат — смотрите в AVC-Intra MXF broadcast mezzanine.

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

  • AVC-Intra MXF broadcast mezzanine — классифицирует инспекцию VideoDAR источника в строки NeedsLetterbox / AlreadyWidescreen, чтобы один decide управлял ветвью леттербокса.
  • Three-tier MP4 ladder (LQ / MQ / HQ) — выводит суффикс имени файла каждого уровня из имени источника и сохраняет его через setvar для каждого мультиплексора MP4.

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

  • Ссылка на неопределённую переменную. Выражение, читающее A.Probe.AudioCount, пока не подключён входной пин с именем A, падает во время выполнения с ошибкой шаблона. Сопоставьте каждый идентификатор Jinja входному пину на этой плитке перед сохранением.
  • Встраивание длинной ветвящейся лестницы в одно выражение. Многостраничный Jinja с вложенными блоками {% if %} труден для проверки и тестирования. Разнесите классификацию по mdecide или сцепите два более простых узла eval, чьи выходы питают друг друга.
  • Получение числового результата для числового сравнения decide. eval всегда отдаёт строку. decide ниже по потоку, использующий < или >= против результата, лексикографически сравнит строки, а не числа. Либо преобразуйте фильтром Jinja (|int) и сравнивайте с закавыченной строкой, либо пропустите eval и подайте числовой инспекционный пин прямо в decide.
  • Побочные эффекты через eval. Узел чист — единственный результат это то, что вытекает через Value. Хранение состояния для поздних этапов требует setvar; eval сам по себе не может изменять переменные процесса.
Медиа.маги Документация