eval

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и так далее.Совместимые узлы выше по потоку (на пин):
4. Выходы
Value—string. Вычисленный результат выражения, отрисованный как строка. Сравнения ниже по потоку по умолчанию трактуют его как текст; используйте фильтры преобразования Jinja в самом выражении, если нужно числовое значение.Совместимые узлы ниже по потоку:
5. Параметры

Форма «Настройки» содержит подпись и одно поле выражения.
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, …); список идентификаторов редактора определяет, какие входные пины выводит узел. - Обязательно. да.
- Что задаёт. Вычисление. Используйте Jinja
Соответствие JSON-ключей и названий полей
| JSON-ключ | Название поля |
|---|---|
expr |
Expression |
6. Пример

Полный разбор — переменные, настройка каждого узла и ожидаемый результат — смотрите в 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 сам по себе не может изменять переменные процесса.