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

Last updated

decide

Узел decide в центре холста с входами Package и VideoHeight, питающими ветвь SD.

1. Сводка

Разветвляет процесс по условию «истина/ложь», построенному из одного или нескольких выражений против инспектированных метаданных. Когда все выражения истинны (при AND) или хотя бы одно (при OR), входной пакет вытекает в ветвь истина; иначе узел удерживает пакет, и потребители ниже по этой ветви не срабатывают.

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

  • Бинарная маршрутизация по инспектированному свойству — HD против SD, чересстрочное против прогрессивного, пороги по числу аудиодорожек, проверки семейства кодека.
  • Шлюзование дорогой ветви по предусловию — перекодировать только если кодек или растр источника не соответствует; иначе пропустить.
  • Объединение нескольких проверок в одну ветвь — например, VideoHeight ≥ 1080 AND VideoFrameRate ≥ 50 выбирает путь HD с высокой частотой кадров.
  • Захват исхода невыполненного условия как параллельной ветви — пара узлов decide с противоположными выражениями, чтобы процесс всегда брал ровно один из них.

3. Входы

  • Packagecore.Package. Пакет для передачи, когда условие истинно.

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

    • analyze — отдаёт метаданные-пины, на которые ссылается выражение, и передаёт тот же пакет на своём выходе Package.
    • download — когда решение не зависит от инспектированных метаданных (например, ветвление по переменной процесса через eval).
  • Метаданные-пины (динамические) — по одному входному пину на свойство, на которое ссылается выражение, типизированному под это свойство. Форма рисует эти пины в выпадающем списке Available PINs по мере того, как пользователь выбирает поля; на холсте они появляются слева на плитке узла и должны быть подключены от соответствующего выхода analyze или eval.

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

    • analyze — соответствующий инспекционный пин из Selected PIN на анализаторе.
    • eval — выход Value узла eval, когда решение строится на вычисленном выражении.

4. Выходы

  • Packagecore.Package. Тот же пакет со входа, пропущенный только когда совокупное выражение истинно.

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

    • map/audio, map/video, map/text, map/timecode — продолжают цепочку мультиплексирования на ветви, которую шлюзует этот decide.
    • decide — цепляет ещё одно условие на той же ветви, когда логика не сворачивается чисто в один AND/OR.
    • analyze — повторно инспектирует преобразованный пакет в середине конвейера перед следующим решением.
  • Eval[]bool. Результат вычисления для каждого выражения в условии. Подключается редко — используется, когда логике ниже по потоку нужно видеть, какое подусловие совпало.

5. Параметры

Форма «decide Node Settings» с выпадающим списком Combinator и одной строкой выражения VideoHeight < 1000.

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

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

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

    • Что задаёт. Подпись на плитке decide — обычно используется для имени ветви (SD, HD, needs-deinterlace).
    • Когда менять. Всегда задавайте на боевых процессах; подпись — это то, что видят читающие, когда просматривают холст.
  • All conditions must me met (AND / OR) (enum, по умолчанию AND)

    Комбинатор, соединяющий строки выражений.

    • Что задаёт. AND запускает ветвь только когда истинны все выражения; OR — когда истинно хотя бы одно.
    • Когда менять. Переключайте на OR, когда любой из нескольких независимых триггеров должен брать одну и ту же ветвь (например, VideoHeight ≥ 2160 OR VideoCodec = "hevc" оба относятся к высокоспецификационной ветви).
    • Допустимые значения. AND, OR.
  • Строки выражений (array из {field, op, value}, по умолчанию [], обязательно)

    По одной строке на условие. Каждая строка выбирает входной пин, оператор и значение для сравнения.

    • Что задаёт. Каждая строка проверяет одно свойство: селектор field перечисляет входящие метаданные-пины, выпадающий список operator предлагает ==, !=, <, <=, >, >=, а поле value несёт константу для сравнения.
    • Когда менять. Добавляйте строку на каждое свойство, от которого зависит решение. Используйте == и != для строковых свойств (имена кодеков, порядок полей) и числовые операторы для целых и дробных.

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

JSON-ключ Название поля
comb All conditions must me met
expr (строки выражений)

6. Пример

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

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

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

  • AVC-Intra MXF broadcast mezzanine — шлюзует цепочку фильтров SD-леттербокса по инспекции VideoHeight источника, чтобы источники 4:3 получали леттербокс 16:9, а широкоэкранные его пропускали.
  • Content-aware preview proxy ladder — стоит после mdecide на каждом уровне лестницы, чтобы пофайловый конвейер фильтров уровня срабатывал только когда источник попадает в диапазон высот этого уровня.

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

  • Маршрутизация по ещё не вычисленному пину. Включение decide на ноге исходного пакета до того, как его analyze отдал упомянутый пин, даёт null-сравнение, и ветвь не срабатывает никогда. Всегда ставьте decide после analyze (или eval), чьи пины он читает.
  • Оставленная необработанной ложная ветвь. decide шлюзует лишь один исход; пакеты, чьё выражение ложно, останавливаются здесь. Либо парьте этот узел с комплементарным решением (например, один decide для < 1000 и другой для >= 1000), либо используйте mdecide с явной ветвью default ELSE, чтобы исход процесса был полным.
  • Смешение AND и OR в одной группе строк. decide объединяет все строки одним комбинатором. Вложенная логика (например, A AND (B OR C)) требует либо eval, сводящего внутреннее выражение к одному значению, либо второго decide ниже по потоку первого.
  • Сравнение строкового свойства числовым оператором. Числовые операторы на VideoCodec, VideoFieldOrder и подобных строковых пинах молча возвращают ложь; используйте == или != для них.
Медиа.маги Документация