FFAStrans

FFAStrans позволяет автоматизировать приём, анализ, фильтрацию, транскодирование и доставку медиофайлов с помощью связанных узлов: программа следит за папками и FTP, запускает FFmpeg и AviSynth-обработку, ветвит задания по условиям, использует переменные, сохраняет рабочие пресеты, распределяет задачи между хостами и выдаёт готовые файлы в нужные каталоги или другие точки доставки.

Рабочая схема в FFAStrans строится не как очередь независимых конвертаций, а как граф процессов. Источник поступает в монитор или подаётся вручную, затем проходит через декодеры, анализаторы, фильтры, кодировщики и узлы доставки. Между этапами можно добавлять проверки, развилки, ожидание, повторное использование переменных, вызов другого workflow и служебные действия вроде отправки почты, выполнения команды или HTTP-запроса.

Такая модель особенно полезна там, где одни и те же правила нужно применять постоянно: например, принимать новые MXF из сетевой папки, определять параметры материала, приводить звук к заданной громкости, формировать XDCAM-HD для вещания и параллельно H.264-копию, а затем разносить результаты по разным каталогам. При разовой перекодировке FFAStrans тоже работает, но сильнее всего раскрывается именно в повторяемых автоматизированных цепочках.

Скачать FFAStrans

Оценка 9.7Рекомендуем
  • Конвертация видео
  • Сжатие файлов
  • Просто для новичков
Скачать бесплатно на Windows
Лучшая альтернатива
FFAStrans
Оценка 8.5
  • Высокий порог настройки
  • Сложные ветвящиеся схемы
  • Много ручных параметров
Скачать FFAStrans
Загрузка начнётся после нажатия

Что делает FFAStrans и как устроен рабочий процесс

Центральная часть программы — редактор workflow с рабочим полотном. Каждый процессор отображается отдельным прямоугольным узлом, входы и выходы соединяются линиями, а направление обработки идёт слева направо. У большинства узлов зелёный вход означает обычный успешный путь, синий выход ведёт к следующему действию, а для обработки ошибок можно назначать отдельные входные состояния. Это даёт возможность не просто последовательно запускать конвертеры, а описывать реальную производственную логику.

Редактор workflow FFAStrans с соединёнными узлами кодировщиков, фильтров и доставки

На полотне могут одновременно находиться несколько входов и несколько выходов. Например, один монитор папки способен передавать материал в декодер A/V Media, после которого схема разделяется: первая ветвь делает эфирный мастер, вторая создаёт веб-копию, третья извлекает звук. При необходимости линии сходятся через узел Hold с синхронизацией или заканчиваются независимо. В правом клике по полотну доступна вставка процессора; узлы сгруппированы по категориям Monitors, Decoders, Analysers, Filters, Encoders, Deliveries, Others и Operations.

Слева находится менеджер workflow. Через контекстное меню схемы можно запускать и останавливать, включать и отключать, дублировать, переименовывать, перемещать по папкам, открывать свойства и подавать файлы вручную. Это удобнее, чем держать отдельные конфигурации конвертера для каждого назначения: рабочие цепочки остаются раздельными, но управляются из одного дерева.

Важная часть повседневной работы — Status Monitor. Он показывает активные задания, текущий процессор, исходный файл, состояние обработки и историю завершённых задач. Отсюда можно прерывать конкретное задание или весь набор активных задач. Для диагностики полезно, что командные процессы и кодировщики передают текст статуса и, когда это возможно, вывод стандартных потоков в монитор.

Окно FFAStrans monitor со списком активных и завершённых заданий

Первый конвейер: Monitor → Encoder → Delivery

Самая простая полезная схема состоит из трёх узлов: Folder из категории Monitors, H.264 из Encoders и Folder из Deliveries. Первый следит за входным каталогом, второй создаёт новый медиофайл, третий переносит или копирует результат в каталог назначения. Узлы соединяются перетаскиванием от выходного коннектора предыдущего процессора к входу следующего.

После вставки Folder Monitor задаётся путь и маска файлов, затем в H.264 выбираются формат изображения, контейнер, параметры видео и аудио, а в Delivery Folder — каталог назначения и правила имени. Workflow сохраняется и запускается через контекстное меню. Как только во входной папке появляется подходящий файл, монитор регистрирует его и создаёт задание. Для проверки схемы до постоянного запуска можно подать один или несколько файлов вручную.

Настройки Watchfolder: папка, маски файлов, Rebuild history, Clear history и Forget missing files

Настройка Folder Monitor

Folder Monitor умеет следить за локальными и UNC-путями. Поле Accept files задаёт допустимые имена и расширения с масками, а Deny files исключает нежелательные объекты. Несколько шаблонов разделяются вертикальной чертой. В результате можно, например, принимать только MOV и MXF определённого шаблона, игнорируя WAV, временные файлы и служебные объекты.

Опция Recurse включает обход подкаталогов. Deny folders позволяет исключать отдельные ветви дерева, а Deny attributes — пропускать файлы с заданными атрибутами. Create folder создаёт наблюдаемую папку, если её ещё нет. Localize file делает локальную рабочую копию принятого файла; она используется как промежуточный объект и удаляется после завершения задания.

Check for growing files нужен, когда источник копируется постепенно. В режиме once монитор ждёт цикл и убеждается, что размер перестал меняться, прежде чем считать файл готовым. В непрерывном режиме новое задание может формироваться при каждом изменении размера. Эта возможность полезна для обновляемых файлов, но она заметно увеличивает число проверок и должна включаться только там, где действительно нужна.

Forget missing files синхронизирует историю с реальным содержимым папки: если уже обработанный файл удалить, а позже вернуть, он снова сможет быть принят. При очень больших watch folder эта опция и постоянная проверка растущих файлов увеличивают нагрузку, поскольку процессору приходится обслуживать больше записей. Для каталога с сотнями тысяч объектов практичнее сначала решить, действительно ли нужна повторная регистрация исчезнувших файлов, или лучше организовать отдельную входную очередь.

Rebuild History и Clear History

FFAStrans хранит историю того, что уже было принято монитором. Rebuild History сканирует текущую папку и помечает найденные файлы как уже обработанные, поэтому они не запускают массовую очередь после включения нового workflow. Это безопасный способ начать наблюдение за давно существующим каталогом, когда интересуют только будущие поступления.

Clear History делает противоположное: удаляет учётные записи мониторинга, после чего находящиеся в папке подходящие файлы снова рассматриваются как новые. Эту команду следует применять осознанно, особенно если в watched directory лежит большой архив: очистка истории способна повторно отправить в работу весь набор.

Ручная подача файлов

Для тестов не обязательно запускать монитор. Файл можно отправить в workflow вручную на выбранный стартовый узел. Такой способ удобен, когда нужно проверить новый профиль кодирования или ветвление на одном образце и не затрагивать входную папку. В production-схемах ручная отправка также полезна для повторной обработки исключительного файла без вмешательства в историю watch folder.

Ветвление, состояния входа и обработка ошибок

В FFAStrans линия между узлами несёт не только факт завершения предыдущего действия, но и его состояние. Для входного коннектора следующего процессора можно выбрать запуск при успехе, при ошибке или в любом случае. Это базовый механизм построения резервных путей: если основной Delivery Folder не смог скопировать файл на сетевое хранилище, ошибка может вести к запасному каталогу, уведомлению или дополнительной диагностике.

Такой подход отличается от сценария, где любой сбой немедленно завершает всю цепочку. Ошибку можно перехватить, выполнить альтернативные действия и продолжить workflow. Но есть важное следствие: если аварийная ветвь успешно обработала проблему и закончилась обычным успешным процессором, итоговое задание может считаться завершённым успешно. Поэтому для эксплуатации нужно заранее определить, какие сбои считаются восстановленными, а какие должны оставлять финальный статус ошибки.

Conditional

Conditional выполняет условную проверку выражения и позволяет направить поток по разным ветвям. На практике в условии используют переменные, полученные из исходного файла, анализаторов или предыдущих процессоров. Так можно разделить SD и HD, обработать только материал определённого кодека, отправить файлы с заданной частотой кадров в отдельную цепочку или выбрать разные каталоги назначения по имени и метаданным.

Условный узел лучше применять для одного понятного решения. Если на одном участке схемы накладывается много независимых проверок, граф быстро становится трудночитаемым. Часто проще сначала Populate Variables вычислить несколько явных признаков, затем по одному признаку выполнить Conditional и вывести две взаимно исключающие ветви.

Foreach, Hold и Insert Workflow

Foreach создаёт ветви по элементам массива и может сохранять текущий элемент в пользовательскую переменную. Это удобно для наборов путей, списков потоков или данных, полученных из JSON. Hold способен просто ждать заданное время, но более важен его режим синхронизации: он помогает снова свести параллельные ветви перед общим последующим шагом.

Insert Workflow передаёт задание и связанные с ним данные в другую схему. Такой узел полезен для модульной архитектуры: например, общую проверку входного файла можно вынести в отдельный workflow и вызывать из нескольких производственных цепочек. Это уменьшает дублирование и упрощает изменения, но требует аккуратно согласовывать переменные, пути и ожидания по состояниям.

Переменные, statics и функции

Переменные — один из главных механизмов FFAStrans. Вместо жёстко прописанных путей, имён и параметров процессоры могут использовать значения, относящиеся к текущему заданию. Встроенные переменные описывают свойства файла, медиа, операционной системы, времени и самого workflow. Пользовательские значения создаются отдельно и могут заполняться в процессе выполнения.

Имена встроенных значений отражают тип данных: строковые часто имеют префикс s_, целочисленные — i_, вещественные — f_. Для сложных структур используется JSON-объект, из которого можно обращаться к вложенным полям и элементам массивов. Благодаря этому один и тот же workflow способен строить разные имена выходов, выбирать профиль по разрешению или передавать внешней системе точные параметры текущего файла.

Populate Variables

Populate Variables назначает значения пользовательским переменным и позволяет выполнять короткие функции над строками, числами и данными. Переменная существует в контексте конкретного задания и его дочерних ветвей, поэтому параллельные задания не должны влиять друг на друга. Сам факт создания переменной ничего не делает: её нужно заполнить и затем реально использовать в поле процессора.

Практический пример — формирование пути назначения из двух частей. Одна переменная хранит букву диска или корень сетевого ресурса, вторая — относительную папку проекта. Delivery Folder получает выражение из этих значений и на каждом задании вычисляет фактический путь. Тем же способом можно добавлять к имени код проекта, дату, результат анализа или обозначение профиля.

Statics

Static — глобальное значение, которое не меняется от задания к заданию. Его задаёт администратор, а workflow лишь читает. Это хороший способ убрать из схемы длинные постоянные пути, адреса внутренних сервисов, общие имена каталогов и другие параметры окружения. Если хранилище переехало, достаточно изменить static, а не редактировать десятки узлов.

Нужно различать static и обычную переменную. Переменная на старте задания может быть пустой и получает значение в ходе выполнения; static заранее существует с одним постоянным содержимым. В farm-среде дополнительно учитывают, что системные переменные операционной системы могут отличаться между хостами, поэтому критичные сетевые пути лучше задавать одинаково и проверять на каждом участнике.

Функции в Populate Variables

Функции предназначены для коротких вычислений, которые не требуют отдельного процессора. С их помощью можно работать со строками и числами, извлекать элементы массивов, читать данные, разбирать JSON, применять регулярные выражения и формировать GUID. Они особенно полезны на стыке с HTTP communicate или внешней командой: ответ сохраняется в переменную, затем из него извлекается нужное поле, после чего Conditional принимает решение.

Например, функция чтения массива позволяет взять конкретный элемент JSON-массива, а регулярное выражение — извлечь номер выпуска из имени наподобие TVShow_EP0013.mxf. При построении таких цепочек лучше разделять этапы: сначала получить исходную строку, затем отдельным присваиванием вычислить нужное значение и только потом использовать его в условии. Так ошибку легче увидеть в журнале.

Мониторы источников

Категория Monitors отвечает за автоматическое появление новых заданий. Помимо обычного Folder, доступны FTP и специализированные мониторы для структур камер. Это важно, потому что карточный материал часто состоит не из одного файла: полезные данные распределены по каталогу, XML и нескольким фрагментам, и простая маска расширения не всегда позволяет корректно собрать клип.

FTP Monitor

FTP Monitor используется как вход для файлов на FTP-сервере. Для автоматизации это удобнее, чем сначала вручную скачивать материал в локальный каталог. При проектировании такого workflow нужно учитывать сетевые задержки, права доступа и то, где физически выполняется последующая обработка. Если farm-узел должен читать полученный источник, путь и временное расположение должны быть доступны этому узлу.

Canon XF, Panasonic P2 и GoPro

Canon-XF Monitor ожидает корень структуры Canon XF и работает не как простой фильтр по MXF. Panasonic P2 Monitor понимает структуру P2, умеет учитывать клипы, разбитые между носителями, и может объединять найденные части. Для P2 также предусмотрено чтение sidecar XML в переменную, что позволяет использовать метаданные дальше в workflow.

GoPro Monitor ориентирован на клипы, разбитые камерой на несколько файлов, и объединяет связанные сегменты. Во всех таких случаях важно передавать корень структуры, а не случайный вложенный каталог. Перемещение отдельных файлов из карточной структуры способно лишить монитор контекста, необходимого для правильной сборки.

Image Sequence

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

Декодирование и подготовка медиаданных

Декодер A/V Media подготавливает аудио и видео для последующих AviSynth-фильтров. В простых схемах можно идти от монитора сразу к кодировщику, но как только нужны фильтры, точная обработка чересстрочного материала, вставка другого видео или сложное преобразование каналов, декодирующий этап становится центральным.

Stills предназначен для неподвижных изображений. Отдельный Youtube-декодер работает с интернет-ярлыками и передаёт материал в обычную цепочку обработки; практическая работоспособность такого источника зависит от внешнего сайта и используемого механизма загрузки, поэтому для критичного production-процесса его следует проверять на конкретных ресурсах, а не воспринимать как универсальный источник.

Почему параметры потоков должны совпадать

AviSynth представляет материал как поток кадров и звука. Если два клипа нужно склеить или один вставить в другой, важны не только контейнеры, но и фактические параметры: разрешение, цветовое пространство, разрядность, частота кадров, число аудиоканалов и sample rate. Несовпадение может привести к ошибке уже в фильтре Insert Media, хотя каждый исходный файл по отдельности читается нормально.

Поэтому перед вставкой заставки, заставочного ролика или другого фрагмента полезно нормализовать оба потока: привести размер, fps, цветовое пространство и аудиоконфигурацию к одному набору. Для звука часто требуется Channel Mapper, особенно если исходный декодер отдаёт больше каналов, чем принимает выбранный аудиокодек.

Фильтры AviSynth

Категория Filters собрана вокруг операций, которые меняют подготовленный поток до кодирования. Эти узлы позволяют удерживать логику в графе и не писать полный AviSynth-скрипт вручную. При этом Custom AviSynth script остаётся доступным для задач, которые не покрываются стандартными элементами.

ФильтрНазначениеЧто учитывать
Channel MapperСведение и переназначение аудиоканаловНужно явно понимать входную и выходную раскладку
Color ConversionПреобразование цветового пространстваСледить за range, matrix и разрядностью
CropОбрезка изображенияМожно сохранять исходный размер кадра
Custom AviSynth scriptСобственный код AviSynthТребует знания синтаксиса и совместимости фильтров
DeinterlaceДеинтерлейсПравильно определить исходное поле и тип материала
FadeПлавное появление или уход аудио и видеоВажны точки начала и длительность
FlipГоризонтальное или вертикальное отражениеПрименяется к видеопотоку
FPS ConverterПриведение частоты кадровНе путать с простым изменением метаданных
Insert MediaВставка другого клипаПотоки должны быть совместимы по ключевым параметрам
Linear TransformationМатричное преобразование цветовых кривыхПредназначено для точной цветовой обработки
NormalizeУвеличение уровня звука без клиппингаНе заменяет EBU-R128 анализ, если нужен broadcast target
PadДобавление полейУдобно для сохранения целевого размера кадра
ResizeИзменение размера изображенияПоддерживает чересстрочный источник
ReverseОбратное воспроизведение аудио/видеоНе имеет отдельного сложного GUI
Safe Color LimiterОграничение уровней luma/chromaИспользуется для безопасного телевизионного диапазона
Swap FieldСмена порядка полейНужно применять только при реально неверном field order
TimecodeНаложение таймкодаПодходит для просмотровых копий и контроля
Video LayerНаложение видео поверх видеоДля прозрачности требуется материал с alpha
WatermarkНаложение PNGПоддерживаются прозрачность, позиция и масштаб

Resize, Crop и соотношение сторон

При приведении разных источников к одному размеру важно различать изменение размера и изменение отображаемого соотношения сторон. Crop удаляет часть кадра, Pad добавляет поля, Resize пересчитывает изображение. В кодировщиках дополнительно встречаются стратегии Stretch, Fit и Fill: Stretch растягивает материал до целевого кадра, Fit помещает весь кадр с сохранением пропорций, а Fill заполняет область с сохранением пропорций ценой обрезки части изображения.

Для чересстрочного видео масштабирование должно учитывать структуру полей. FFAStrans специально отмечает поддержку interlaced-aware обработки в ряде узлов и кодировщиков, поэтому не стоит заранее делать грубый прогрессивный resize внешней командой, если дальнейшая цепочка рассчитана на сохранение interlace.

Watermark и Video Layer

Watermark накладывает PNG, в том числе с альфа-каналом. Можно задавать прозрачность, положение по X/Y и масштаб. Опция Resize to fit source подгоняет изображение под кадр, а последующий процентный resize позволяет уменьшить его относительно уже подогнанного размера. Это подходит для постоянного логотипа, burn-in маркировки или визуальной пометки прокси.

Video Layer предназначен для видеослоя поверх основного потока. Если используется прозрачность, источник слоя должен содержать альфа-канал. Для длинных роликов такой слой существенно увеличивает объём обработки, поэтому его лучше ставить после ненужных анализов, но до финального кодирования.

Channel Mapper

Channel Mapper особенно важен в broadcast-процессах, где один файл может содержать несколько моно-дорожек, стереопару или многоканальный набор. Узел позволяет смешивать и переназначать каналы перед кодированием. В стандартных encoder-узлах дополнительно есть настройки числа дорожек, общего числа каналов и пользовательского mapping, поэтому следует решить, где именно будет выполняться преобразование: в отдельном фильтре или внутри encoder.

Кодирование H.264

H.264 Encoder использует x264 для видео и поддерживает AAC либо PCM в зависимости от выбранного контейнера. Доступны MP4, M4V, MOV, MKV и MXF, но сочетания с PCM различаются: PCM ориентирован на MOV, MKV и MXF, тогда как MP4 и M4V предназначены прежде всего для AAC. Для MXF видеопоток принудительно переводится в intra-структуру.

Настройки изображения включают Video size, display aspect, pixel aspect, режим вписывания, video range и color space. Можно оставить параметры как у источника либо явно задать целевое пространство. Для преобразования цвета предусмотрены LUT и автоматический tone mapping. Пользовательский LUT может задаваться путём к файлу .cube через переменную.

Framerate позволяет принудительно изменить частоту кадров. Для чересстрочного входа можно выбрать режим анализа, чтобы решение опиралось на фактический видеопоток, а не только на метаданные. Отдельно задаётся field order. В секции x264 есть bitrate, level, profile, tune и компромисс quality/speed. Если нужна широкая совместимость, Force 4:2:0 8 bit ограничивает формат до 8-битного 4:2:0 даже при выборе 10-битного профиля.

Faststart перемещает служебные данные контейнера так, чтобы MP4/MOV было удобнее начинать воспроизводить до полной загрузки. Для архивного или эфирного использования это не всегда принципиально, но для веб-доставки опция полезна. В поле Custom x264 options допускаются параметры, которых нет в GUI; они имеют приоритет при конфликте со стандартной настройкой.

Аудио в H.264-профиле

FFAStrans различает число аудиодорожек и число каналов. Можно сохранить структуру источника, разложить каналы в отдельные моно-дорожки или задать собственную раскладку. Если выход требует больше каналов, чем есть во входе, недостающие могут заполняться тишиной. Пользовательское отображение каналов открывает отдельное окно mapping для каждой дорожки.

Если до encoder стоит Loudness Analyzer, параметр Conform volume может использовать его результаты для приведения уровня. Это более предсказуемо, чем простой Normalize, когда production-требование задано в терминах измеренной громкости. Sample rate и bitrate аудио задаются отдельно в рамках выбранного формата.

Кодирование H.265/HEVC

H.265/HEVC Encoder использует x265 и выдаёт MP4, MOV, TS или MKV. Видеонастройки во многом похожи на H.264: размер, DAR, PAR, режим вписывания, частота кадров, interlaced input, field order, bitrate, level, profile, tune и preset качества/скорости. Это позволяет переносить привычную структуру workflow между H.264 и HEVC, не меняя всю логику вокруг.

В цветовой секции доступны современные пространства, включая HLG и PQ. Если для PQ не найдены данные mastering display, кодировщик может подставить стандартный набор метаданных, который при необходимости переопределяется через x265 options. В production-схеме HDR лучше не оставлять на автоматике без проверки: входной transfer, primaries, mastering data и целевое устройство должны быть известны заранее.

Custom x265 options добавляют параметры, отсутствующие в GUI, и переопределяют конфликтующие значения. Это полезно для точной настройки GOP, HDR-метаданных и других параметров x265, но усложняет сопровождение. Если профиль будет использоваться многими операторами, нестандартные ключи лучше оформить как пресет и документировать внутри workflow.

Профессиональные и вещательные кодировщики

FFAStrans содержит отдельные encoder-узлы для форматов, где недостаточно просто выбрать произвольный codec/container. Такие узлы ограничивают комбинации размером кадра, частотой, битрейтом и wrapper в соответствии с целевым форматом. Это снижает риск собрать технически записываемый, но не соответствующий ожидаемому профилю файл.

КодировщикТиповой результатОсобенность
AVC-IntraMXF, классы 50/100/200Предопределённые broadcast-профили
Avid DNxHDMXF или MOVПрофили для HD post-production
Avid DNxHRMXF или MOVПоддержка разрешений выше HD и профилей HQX/444
XDCAM-HDMXF или MOVПрофили 18/25/35/50 Мбит/с с допустимыми raster/fps
XAVCMXFXAVC-Intra с фиксированными классами и форматами
IMX D-10MXF или MOVSD-профили 30/40/50 Мбит/с
ProRes AW/KSMOVFFmpeg-реализации ProRes с профилями Proxy/LT/SQ/HQ/XQ
DV/DVCPRODV-familyПодготовка материала под DV-профили
Generic MPEGMPEG-1/MPEG-2Настраиваемые MPEG-видео и PCM/MPEG/MP3-аудио
DVDMPEG-2 или DVD ISOМожет формировать совместимый образ диска
UncompressedAVI/MOV RGB или YUVНесжатое видео и аудио, либо только WAV
StillsИзображение или последовательностьЭкспорт кадров вместо видеопотока
Audio extractionОдин или несколько аудиофайловИзвлечение звука без видеовыхода
Windows MediaWMVПрофиль для Windows Media

Transwrap и режим Processing

В ряде профессиональных encoder-узлов есть режим Processing, позволяющий попытаться не перекодировать видеопоток. Full processing выполняет масштабирование, переинтерлейс, цветовую обработку и полное кодирование. None/transwrapping пытается скопировать видео как есть, но сначала проверяет, соответствует ли оно выбранному профилю. Если ключевые параметры не подходят, задача завершается ошибкой.

Режим Transwrap when possible сначала пытается скопировать поток и при невозможности переходит к полной обработке. Это удобный компромисс для смешанного входа: соответствующие файлы проходят без лишнего видеокодирования, остальные автоматически приводятся к профилю. При этом аудио может проходить полную обработку независимо от режима видео, что важно учитывать при расчёте времени и при ожидании бит-в-бит копии всего файла.

XDCAM-HD

XDCAM-HD Encoder ограничивает разрешения, fps и битрейты допустимыми сочетаниями. Профиль 50 Мбит/с рассчитан на XDCAM-HD 422, более низкие битрейты имеют собственные ограничения raster и частоты кадров. Выход можно упаковать в MXF или MOV. В encoder также доступны настройка аудиодорожек, conform volume и режимы transwrap.

Для интеграции с Avid предусмотрены поля, связанные со структурой проекта и tape/reference name. Если production-процесс строится вокруг Avid MediaFiles, Delivery Folder должен писать в каталог, соответствующий принятой структуре, а naming и метаданные следует согласовать с ingest-системой.

XAVC

XAVC Encoder создаёт XAVC-Intra в MXF и предоставляет только допустимые комбинации формата и класса. Для 2160p доступны высокие классы, для 1080 и 720 — свои наборы. Такой узел удобнее Custom FFmpeg, когда нужен предсказуемый выход: вместо ручного набора codec flags оператор выбирает профиль из ограниченного списка.

Как и в XDCAM/DNx-профилях, здесь есть Processing, Interlacing, Resizing, настройка дорожек и битовой глубины аудио, а также Conform volume. При transwrap неподходящий исходный поток не будет молча скопирован в несовместимый wrapper: проверка завершит попытку или заставит схему перейти к полной обработке, если выбран соответствующий режим.

ProRes AW/KS

ProRes Encoder использует реализации FFmpeg prores_aw/prores_ks и создаёт MOV. Поддерживаются распространённые размеры от SD до 4K и профили Proxy, LT, SQ, HQ и XQ. Для совместимости с экосистемой Apple следует учитывать, что это не фирменный Apple ProRes encoder, а независимая реализация; совместимость конкретной цепочки нужно проверять на принимающей стороне.

Custom FFmpeg: когда стандартных профилей недостаточно

Custom FFmpeg — один из самых гибких узлов FFAStrans. Он похож на запуск FFmpeg через Command Executor, но берёт на себя служебную часть команды: автоматически подставляет путь к FFmpeg, текущий источник, создаёт временный выходной файл в рабочем каталоге и после успешного выполнения обновляет s_source, чтобы следующие узлы работали уже с новым результатом.

В настройках можно отдельно указать video codec, audio codec, битрейты, дополнительные FFmpeg options и расширение результата. Если нужен stream copy, достаточно передать параметры копирования и mapping, не собирая каждый раз полный command line. Если extension не задан и пользователь сам формирует путь выхода в options, ответственность за имя и последующее значение источника становится выше.

Значения nul, null или отсутствие расширения могут использоваться для вывода в null без создания файла. Это полезно для служебных задач и тестирования производительности, но в production workflow такой профиль лучше явно помечать, чтобы оператор не ожидал итоговый файл.

Custom FFmpeg против отдельного Command Executor

Custom FFmpeg удобен, когда операция действительно является медиакодированием и следующий узел должен автоматически получить новый s_source. Command Executor подходит для произвольных внешних программ, файловых операций и скриптов. Он запускает указанную команду, ждёт завершения, может сохранить stdout/stderr в переменную и анализирует exit code.

Если внешняя программа завершилась с ненулевым кодом, Command Executor переводит выход в ошибку. При необходимости exit code можно игнорировать, но это следует делать только если программа возвращает ненулевой код в штатной ситуации. Timeout позволяет принудительно завершать зависшие команды; нулевое значение отключает таймаут.

Опция Show console имеет смысл только при интерактивном запуске, потому что служба не показывает обычное консольное окно. Кроме того, при открытой консоли вывод не попадает в Status Monitor. Для серверной эксплуатации надёжнее оставлять консоль скрытой, а нужный текст читать из std-stream или файла журнала.

Служебные узлы: текст, HTTP и e-mail

FFAStrans способен работать не только с медиапотоками. Generate text file создаёт текстовый файл, в который можно подставлять переменные задания. Это подходит для sidecar-метаданных, manifest-подобных файлов, простых отчётов и управляющих файлов для другой системы.

HTTP communicate отправляет данные по URL и позволяет связывать workflow с внешними сервисами. Типовой сценарий: после транскодирования передать MAM-системе путь, имя, длительность и технические параметры результата. Ответ можно сохранить, разобрать функциями в Populate Variables и использовать в следующем Conditional.

Send e-mail формирует уведомление одному или нескольким получателям. Поскольку поля поддерживают переменные, тема и тело могут содержать имя исходника, имя workflow, путь выхода, текст ошибки и другие данные. Почтовый узел полезно ставить не на каждый успех, а на исключения: массовая рассылка успешных заданий быстро превращает действительно важные ошибки в информационный шум.

Анализ громкости, interlace и качества

Категория Analysers включает Loudness, Interlacing и Video Quality. Эти узлы не обязательно меняют файл; их задача — получить измерение и сохранить результат, который затем используется в условии или encoder. Анализ до конвертации позволяет принимать решения на основе реального контента, а не только контейнерных метаданных.

Loudness

Loudness Analyzer измеряет звук по методике EBU R128 и формирует данные, которые могут использоваться downstream. Encoder-узлы H.264, H.265 и профессиональные профили умеют Conform volume, если в задании уже есть таблица результатов Loudness. Таким образом, анализ и коррекция разделены: один узел измеряет, второй применяет нужное изменение в рамках окончательного кодирования.

При многоканальном звуке важно правильно описать измеряемую конфигурацию. Если материал физически хранит стереопару как две моно-дорожки, измерение как двух независимых mono не эквивалентно измерению stereo. В broadcast workflow сначала определяют смысл дорожек, затем задают Discrete Tracks и Total channels так, чтобы анализ соответствовал реальной программе.

Interlacing

Interlacing Analyzer определяет, является ли материал чересстрочным, и сохраняет результат в целочисленную переменную. Эту переменную можно использовать в Conditional или передать в encoder, чтобы автоматически выбирать deinterlace, field order либо отдельный профиль. Это надёжнее, чем безусловно деинтерлейсить всё входящее видео.

Video Quality и VMAF

Video Quality сравнивает обработанный материал с эталоном и поддерживает алгоритм VMAF. Такой узел нужен не для субъективной оценки художественного качества, а для автоматизированного контроля: после кодирования можно измерить расхождение и отправить файл по разным ветвям в зависимости от результата. Для корректного сравнения reference и processed copy должны быть согласованы по временной структуре и содержанию.

Delivery Folder и правила выходного имени

Folder из категории Deliveries завершает многие схемы. Он принимает текущий s_source и доставляет файл в указанный каталог. Путь поддерживает переменные, поэтому один workflow может раскладывать результаты по проектам, датам, форматам или клиентам без множества почти одинаковых копий.

Prefix и Suffix добавляют текст до или после основного имени. Drop original name позволяет полностью отказаться от исходного имени и построить новое из prefix/suffix. Drop extension аналогично убирает расширение, если оно должно формироваться другим способом. Force case переводит имя в верхний или нижний регистр.

При конфликте имён доступны Overwrite и Unique name. Unique name добавляет числовой суффикс, а Zero padding задаёт количество ведущих нулей. Это безопаснее безусловного overwrite для входных очередей, где теоретически могут встретиться одинаковые имена из разных источников.

Move instead of copy перемещает файл вместо копирования. На одном диске или общем ресурсе такая операция может быть практически мгновенной, но она меняет жизненный цикл текущего источника. Если последующие ветви всё ещё рассчитывают получить этот файл, move следует применять только после синхронизации или в последнем процессе ветви.

FTP Delivery

FTP Delivery отправляет результат на FTP-сервер. Это полезно для внешней передачи, когда получающая система не видит внутренние UNC-пути. При проектировании необходимо учитывать повторные попытки, время передачи и поведение при частично отправленном файле. Если после FTP стоит следующий процессор, он должен запускаться только после успешного завершения передачи.

Status Monitor, журналы и повторный запуск

Status Monitor показывает состояние очереди и историю. Для активной задачи важны имя workflow, источник, текущий processor/node и сообщения, которые пишет процессор. В случае внешней команды туда может попадать stdout/stderr; encoder отображает этапы кодирования и прогресс. Это первое место, где стоит проверять зависание или неожиданный переход по ветви.

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

Timeout и зависшие процессы

В свойствах workflow есть Timeout level, который определяет, насколько быстро FFAStrans считает процесс остановившимся без прогресса. Для очень больших файлов слишком агрессивное значение может привести к ложному прерыванию; слишком мягкое — долго удерживать слот из-за реально зависшего encoder. Отдельные процессоры, например Command Executor, имеют собственный timeout, поэтому необходимо понимать, какой уровень завершает конкретный этап.

Сохранение work folders

По умолчанию промежуточные рабочие файлы удаляются после завершения, но в Maintenance можно сохранять все work folders или только каталоги failed job. Для диагностики второй режим обычно полезнее: он оставляет материалы проблемного задания и не заполняет хранилище результатами обычной работы. Постоянное Keep all job work folders следует включать временно, иначе кэш способен занять большой объём.

Log Level

Вкладка Special задаёт уровень логирования workflow. Чем выше детализация, тем больше информации доступно при диагностике. Рабочий уровень стоит выбирать так, чтобы обычный журнал оставался читаемым, а повышенную детализацию включать на время поиска ошибки. Для внешних скриптов полезно дополнять системный лог собственным статусом через stdout или s_success/s_error.

Свойства workflow

Свойства схемы определяют не конкретный codec, а поведение очереди целиком. Здесь задаются интервал мониторинга, расписание, приоритет, ограничения по дням, обслуживание истории, farm-хосты и специальные режимы. Хорошо настроенный workflow поэтому состоит из двух уровней: логики узлов на полотне и общих правил запуска.

General: Sleep timer, Cron и Priority

Sleep timer задаёт цикл, через который мониторы ищут новые файлы. Для схем без monitor-узлов он не влияет на работу. Маленький интервал быстрее подхватывает вход, но чаще сканирует хранилище. Для сетевых папок с большим числом объектов разумнее выбирать интервал по реальным требованиям SLA, а не ставить минимальное значение автоматически.

Cron позволяет задать более сложное расписание и имеет приоритет над обычным sleep timer. Это удобно для ночной обработки, окон технического обслуживания и задач, которые должны запускаться только в определённое время. Дополнительно Run on ограничивает дни недели.

Priority управляет порядком выполнения job, а не простым системным приоритетом процесса. Высокоприоритетные задания обслуживаются раньше. Ручные submissions из GUI имеют высокий приоритет, а API-задачи используют приоритет workflow, если при создании не передано другое значение. Поэтому тест, вручную отправленный оператором, может оказаться впереди обычной автоматической очереди.

Maintenance

Validate records after задаёт срок, после которого FFAStrans может проверить старые записи монитора. Если исходный файл уже отсутствует и запись достаточно старая, она удаляется; при повторном появлении такой файл считается новым. Keep work files for определяет срок хранения рабочих файлов. Эти параметры помогают удерживать базу и кэш в контролируемом размере.

Farming

Вкладка Farming определяет, какие хосты или группы хостов могут участвовать в конкретном workflow. Список можно трактовать как include или exclude. Пустой список означает отсутствие специального ограничения. Это позволяет отделить, например, GPU-машины от CPU-only, выделить узлы с доступом к конкретному SAN или не пускать тяжёлый профиль на слабый сервер.

Special

В Special находятся Log Level, базовая парольная защита workflow и Force 32bit dependencies. Пароль предназначен прежде всего для защиты схемы от случайного изменения, а не как криптографический контур безопасности. Force 32bit dependencies принудительно выбирает 32-битные FFmpeg/AviSynth-зависимости и имеет смысл лишь при конкретной совместимости с фильтрами или компонентами.

Распределённая обработка и farm

FFAStrans может распределять processor jobs между несколькими хостами. В такой архитектуре один набор workflow обслуживает несколько машин, а ограничения по Farming направляют нужные задания на подходящие worker. Это полезно при большом потоке кодирования, когда один сервер становится узким местом, или когда разные узлы оснащены разным аппаратным обеспечением.

Главное практическое требование farm — одинаковая доступность исходников, выходов и зависимостей. UNC/SAN-путь должен разрешаться с учётной записи службы на каждом worker, а локальный диск C: на manager и worker — это разные хранилища. Если workflow использует локальный путь, его либо нужно локализовать перед распределённым этапом, либо гарантировать идентичное содержимое на всех узлах.

То же относится к статическим путям к утилитам и LUT. Если один host имеет дополнительный encoder или фильтр, workflow должен либо ограничить farm соответствующей группой, либо заранее проверить наличие зависимости. Иначе одна и та же схема будет успешно работать на части farm и случайно падать на другой.

REST API и web-интерфейс

FFAStrans предоставляет JSON-based API для интеграции с внешними системами. Через него можно создавать задания, передавать пользовательские переменные, управлять стартом и состоянием job, получать статус, приостанавливать, возобновлять и завершать работу. Это позволяет использовать FFAStrans как медиапроцессор внутри MAM, портала загрузки или внутреннего production-сервиса без ручного взаимодействия с Workflow Manager.

Web-интерфейс даёт операторам контролируемый доступ к job submission и мониторингу через браузер. Его можно разместить отдельно от основного сервера, чтобы пользователям не требовались прямые права на storage и FFAStrans host. Администратор управляет пользователями, группами и разрешениями, а сами задания всё равно исполняются основным движком.

Job Starter и пользовательские формы

Job Starter позволяет выбрать workflow, добавить источник и отправить задание. Источник может быть выбран из доступного сервера каталога, загружен или передан как известный путь. Если workflow использует специально оформленные webui variables, интерфейс формирует поля ввода для оператора. Поддерживаются текстовые поля, textarea, checkbox, select/combo, radiobox, дата, время и slider.

Важная деталь: переменная должна реально использоваться в workflow, иначе web-интерфейсу нечего передавать в последующую обработку. Это защищает формы от бесконечного списка неиспользуемых значений, но иногда сбивает с толку при настройке: переменная создана, однако поле не появляется, пока она не вставлена хотя бы в один processor.

Manual Review

Manual Review ставит job в состояние ожидания и просит человека выбрать дальнейший путь. Если к выходу подключено несколько последующих процессоров, web-пользователь выбирает один из вариантов. Дополнительно можно показать форму и собрать метаданные перед продолжением. Это полезно, когда полностью автоматическое решение нежелательно: например, перед публикацией, после QC или при классификации контента.

Такой workflow сочетает автоматизацию и ручной контроль без передачи оператору всего редактора схем. Пользователь видит только то действие и те поля, которые разрешены web-интерфейсом, а после подтверждения job продолжает с сохранёнными переменными.

Scheduler

Web Scheduler запускает workflow по расписанию. В отличие от простого таймера, условие может выполнить скрипт и решить, действительно ли в этот момент нужно создавать job. Это подходит для ночной очистки, периодического сравнения каталогов или нестандартного watch-механизма, где сначала требуется проверить несколько внешних условий.

Отправка сегментов

Web-интерфейс умеет передавать выбранные пользователем in/out points и сложный объект источника. Для простого stitch можно использовать FFmpeg concat при совместимых I-frame источниках; для покадровой точности рабочая схема может обрезать через AviSynth и затем объединять части. Важна связка интерфейса и workflow: один только выбор сегмента в браузере не заставляет произвольную схему автоматически учитывать точки.

Пресеты узлов

У процессорных узлов есть система presets. Настроенный узел можно сохранить как пресет, переименовать, копировать, экспортировать, импортировать, повторно применять и удалять. Это существенно снижает число ручных ошибок: вместо повторного ввода десятков полей H.264, XDCAM или Delivery Folder оператор выбирает заранее согласованный профиль.

Preset можно пометить как locked, чтобы защитить конкретный экземпляр узла от случайного редактирования. Однако это не означает, что сам общий preset навсегда неизменяем: если его открыть из другого узла, изменить и сохранить под тем же именем, новые настройки повлияют на использования пресета. Поэтому production-профили лучше версионировать именами и менять через управляемую процедуру.

Пользовательские plugin processors

Когда стандартных узлов недостаточно, FFAStrans позволяет добавлять собственные processor plugins. Плагин располагается в специальном каталоге и содержит JSON-описание, HTML-интерфейс, исполняемый файл или скрипт в подкаталоге bin и, при необходимости, HTML help. После добавления workflow editor перечитывает определения при запуске и показывает новый узел в указанной категории.

JSON задаёт имя, категорию, GUID, исполняемый скрипт, интерпретатор, timeout и высоту GUI. GUID должен оставаться стабильным: workflow хранит ссылку на тип processor по идентификатору, поэтому изменение GUID после развёртывания фактически создаёт для редактора другой тип узла.

HTML-часть отвечает только за ввод и сохранение настроек. Во время реального выполнения запускается processor script/executable и получает JSON задания вместе с путём текущего источника. Плагин может установить новый s_source, сообщение успеха или ошибку. Это делает механизм пригодным для интеграции внутренних утилит, QC-инструментов и собственных бизнес-операций.

Встроенный GUI custom processor исторически рендерится через совместимый embedded browser, поэтому сложный современный frontend может оказаться избыточным. Для простых полей и кнопок надёжнее использовать минимальную HTML-разметку, проверенную именно внутри Workflow Manager.

Типовые рабочие сценарии

Вещательный ingest с приведением к house format

Входной Folder Monitor принимает MOV/MXF, A/V Media подготавливает поток, Interlacing Analyzer определяет структуру кадров, Loudness измеряет звук, Conditional решает, требуется ли дополнительная коррекция, а XDCAM-HD или AVC-Intra создаёт house format. После кодирования одна ветвь идёт в основное хранилище, другая формирует H.264 proxy, третья отправляет уведомление или HTTP-сообщение в MAM.

Преимущество такой схемы не в отдельном codec, а в повторяемости. Когда в папку приходит сто файлов с разными исходными параметрами, каждый проходит одинаковую проверку и получает одинаковые naming rules. Оператор вмешивается только в исключения.

Создание веб-копий H.264

Если вход уже стандартизован, цепочка может быть значительно короче: Folder → H.264 → Delivery Folder. В encoder выбираются целевой размер, bitrate, AAC, MP4 и Faststart. При необходимости Watermark добавляет логотип или Timecode делает просмотровую копию с burn-in. Название выхода строится из исходного имени и суффикса профиля.

Для нескольких размеров лучше либо разветвить workflow после декодирования, либо вызвать отдельные reusable workflows. Первый вариант экономит повторную подготовку источника, второй делает схемы компактнее и независимее.

Прокси плюс мастер

Один источник может параллельно идти в DNxHR/ProRes для монтажа и в H.264 для просмотра. После обеих ветвей Hold Synchronize ждёт завершения и запускает HTTP communicate, который сообщает внешней системе сразу оба пути. Если proxy допускается потерять, а мастер обязателен, error handling лучше строить так, чтобы сбой proxy не скрывал ошибку master и наоборот.

Контроль формата перед transwrap

Чтобы не перекодировать уже подходящий материал, анализ и Conditional проверяют ключевые параметры. Подходящий поток отправляется в encoder с transwrap, неподходящий — в full processing. Для professional encoder можно использовать Transwrap when possible и сократить граф, если его внутренней проверки достаточно. Отдельная ветвь полезнее, когда нужно логировать причину решения или применять разные фильтры.

Автоматическая работа с именами и папками

Populate Variables извлекает из исходного имени код проекта регулярным выражением, добавляет дату и строит целевой путь. Delivery Folder использует эти значения для каталога и имени. Если код не распознан, Conditional отправляет файл в quarantine и e-mail уведомляет оператора. Такая схема надёжнее, чем попытка угадать проект на уровне самой сетевой папки.

QC с ручным подтверждением

После транскодирования Video Quality сравнивает результат с reference, а Conditional выделяет файлы ниже заданного внутреннего порога. Успешные идут прямо в delivery, спорные — в Manual Review. Оператор просматривает proxy и выбирает принять или перекодировать, после чего job продолжает соответствующую ветвь.

Ошибки и решения

Watch folder не видит файл

Сначала проверяют Accept/Deny mask, Deny folders и атрибуты. Затем смотрят историю: если имя уже зарегистрировано, файл не считается новым. Для теста можно очистить историю конкретного monitor, но делать это в большой production-папке опасно из-за повторного запуска старых файлов. При включённом growing check нужно также дождаться, пока размер перестанет меняться.

Следующий уровень — доступ к пути от имени процесса FFAStrans. То, что администратор видит UNC в проводнике, не означает, что служебная учётная запись имеет те же права. Для farm проверяется каждый worker, а не только manager.

После удаления и возврата файл не запускается снова

Это нормальная работа истории monitor. Если сценарий предполагает повторную обработку файла с тем же именем, включают Forget missing files или целенаправленно удаляют запись из истории. Однако на огромных папках Forget missing увеличивает объём регулярных сравнений, поэтому иногда лучше организовать вход как папку очереди, откуда обработанный оригинал перемещается.

Custom FFmpeg завершился ошибкой

Проверяют фактический command line, pixel format, color space, параметры codec и mapping. Если вход сложный, перед Custom FFmpeg полезно поставить A/V Media, чтобы FFAStrans подготовил поток предсказуемым способом, но это не универсальное лечение: часть hardware/software encoder ожидает специфические frame properties. Ошибка должна диагностироваться по реальному сообщению FFmpeg, а не по одному номеру возврата.

Если Custom FFmpeg нужен только для remux, начинают с минимального набора параметров stream copy и постепенно добавляют mapping. Так проще понять, какой флаг делает комбинацию неподдерживаемой.

Insert Media падает при совместимых на вид файлах

Сравнивают не только контейнер и разрешение, но также fps, colorspace, bit depth, число каналов и sample rate. Перед вставкой оба потока приводят к одинаковым параметрам. Для аудио добавляют Channel Mapper или явную конфигурацию decoder. Для видео — Deinterlace/FPS Converter/Resize/Color Conversion в нужной последовательности.

Transwrap не срабатывает

Transwrap требует, чтобы ключевые свойства входного видео соответствовали выбранному профилю. Если нет — режим только transwrap закономерно выдаёт ошибку. Когда допустимо автоматическое перекодирование, выбирают Transwrap when possible. Если перекодировать нельзя по производственным требованиям, ошибка должна идти в отдельную ветвь quarantine, а не маскироваться fallback-конвертацией.

Неправильная раскладка звука

Сначала фиксируют фактическую структуру: сколько streams, сколько channels в каждом, какие каналы что означают. Затем выбирают либо Same as source, либо Source channels as tracks, либо Custom channel mapping. Если до encoder выполняется Loudness, его виртуальная конфигурация измерения должна отражать смысл аудио, иначе можно получить корректный технически, но неверный с точки зрения программы результат.

Workflow зависает на внешней команде

Command Executor ждёт завершения процесса. Если утилита открыла дочерний процесс и не вернула управление, job будет висеть до timeout. Устанавливают разумный предел, проверяют, действительно ли command завершается в обычной консоли, и избегают интерактивных запросов. Всё, что требует пользовательского ответа в cmd, для автоматического workflow непригодно.

Выходной файл уже существует

Нужно заранее выбрать политику: Overwrite, Unique name или собственное имя через variables. Молчаливое overwrite удобно только там, где один и тот же логический материал должен всегда заменять предыдущую копию. Для ingest разных источников безопаснее unique naming или папки, построенные по проекту/дате.

Слишком много временных файлов

Проверяют Maintenance: Keep all job work folders не должен быть включён без причины. Для поиска сбоя обычно хватает Keep only failed job work folders и ограниченного срока хранения. Также проверяют пользовательские Command Executor и Custom FFmpeg: если они создают файлы вне рабочего каталога, стандартная очистка FFAStrans их не удалит.

Web-интерфейс видит путь, а job не читает файл

Путь должен быть доступен не браузеру пользователя, а процессу FFAStrans. Загруженный через web файл хранится на серверной стороне, а вручную введённый network path должен разрешаться с учётной записи движка. Если web-server и FFAStrans разделены, одинаковая строка пути не гарантирует одинаковую файловую систему.

Ошибка обработана, но job отображается успешным

Если error branch заканчивается обычным успешным узлом, движок считает ошибку перехваченной. Это корректно для действительно восстановленного сбоя, например когда недоступный основной share заменён резервным. Если же необходимо, чтобы задача осталась failed, аварийная ветвь должна завершаться processor, который явно устанавливает ошибочное состояние, либо не должна превращать сбой в обычный success-path.

Практика проектирования устойчивых workflow

Делить схемы по ответственности

Лучше иметь несколько понятных reusable workflow, чем одно полотно с десятками почти независимых задач. Общий ingest можно вынести отдельно, кодирование house format — отдельно, публикацию — отдельно. Insert Workflow связывает такие модули, а переменные переносят контекст. Это упрощает тестирование и снижает риск случайно повредить unrelated branch.

Использовать statics для инфраструктуры

Пути NAS, корни delivery, имена сервисов и общие параметры не стоит размножать строками по каждому узлу. Static делает конфигурацию среды централизованной. При переносе на другой сервер меняется одно значение, а схема остаётся той же. Пользовательские variables, напротив, следует оставлять для данных конкретного job.

Явно рисовать error path

Каждый критичный encoder, delivery и внешний command должен иметь продуманное поведение при ошибке. Иногда правильный ответ — немедленно завершить job failed. Иногда — отправить запасную копию и уведомить оператора. Если error pin не используется, логика остаётся неявной и исключения начинают обрабатываться случайно.

Тестировать на отдельной входной папке

Новый workflow сначала запускают на небольшом наборе репрезентативных файлов: progressive/interlaced, разные audio layouts, разные размеры и длительности. Это важнее теста на одном идеальном клипе. После проверки history monitor перестраивают так, чтобы production-папка не отправила старый архив в новую очередь.

Не смешивать диагностику и постоянный production-режим

Высокий Log Level, сохранение всех work folders, частые sleep cycles и дополнительные debug-команды полезны при поиске проблемы, но создают лишнюю нагрузку при постоянной работе. После исправления их возвращают к рабочим значениям. Иначе через несколько месяцев система может упереться не в кодирование, а в диск, журнал или сканирование входной папки.

Согласовывать naming до включения overwrite

Имя результата должно быть однозначно связано с источником и профилем. Если один input рождает master, proxy и audio, каждому нужен предсказуемый suffix или отдельная папка. Тогда оператор и внешняя MAM-система понимают, какой файл какой ветви принадлежит, а Unique name остаётся страховкой, а не основным механизмом именования.

Для farm использовать общие сетевые пути

Локальный путь удобен на одной машине, но плохо переносится в farm. Входы, LUT, внешние утилиты и delivery следует либо делать доступными одинаково всем разрешённым host, либо ограничивать workflow нужной группой. Если часть данных временная, Localize file или предварительное копирование может быть надёжнее прямого чтения через медленную сеть.

Цвет, диапазон и HDR в рабочих схемах

В медиаконвейере недостаточно совпадения разрешения и кодека. Ошибка в color range, matrix, primaries или transfer function визуально проявляется как поднятый чёрный, выцветшие оттенки, чрезмерный контраст или неверное преобразование HDR. FFAStrans позволяет управлять этими параметрами на уровне encoder и через отдельные фильтры, поэтому цветовую логику лучше определять до выбора битрейта.

В H.264 можно оставить video range как у источника, только изменить метаданные на full/limited либо реально преобразовать уровни. Это разные действия. Простая смена флага не пересчитывает значения пикселей и нужна лишь тогда, когда сам поток уже соответствует диапазону, а маркировка неверна. Convert to full/limited, напротив, меняет содержимое. Если перепутать эти варианты, видео может выглядеть неправильно в части плееров и монтажных систем.

То же относится к color space. Same as source предполагает сохранение исходной спецификации, а явный выбор целевого пространства требует преобразования. Для сложных случаев используются LUT и tone mapping. Автоматический LUT опирается на распознанные характеристики входа и выбранное пространство выхода; автоматический tone mapping пересчитывает яркостный диапазон алгоритмически. Пользовательский .cube-файл удобен, когда production использует утверждённое преобразование, которое должно воспроизводиться одинаково для всех заданий.

Порядок цветовых операций

Если в цепочке одновременно есть Resize, Watermark и преобразование цвета, порядок имеет значение. Логотип, подготовленный в SDR, после HDR-преобразования может получить нежелательные значения, если его наложить слишком рано. Наоборот, watermark, который должен выглядеть в конкретном целевом пространстве, логичнее добавлять после основной color conversion. Универсального порядка нет: он зависит от того, в каком пространстве подготовлен графический слой.

При диагностике цветовых проблем полезно временно убрать все фильтры, оставить один decoder и encoder и получить контрольный файл. Затем фильтры возвращают по одному. Это позволяет отличить ошибку metadata/range в encoder от преобразования, выполненного AviSynth или пользовательским скриптом.

HLG и PQ в H.265

HEVC-профиль поддерживает HLG и PQ. Для PQ существенны mastering display metadata и корректное описание primaries/transfer. Если вход их не содержит, автоматическое значение не всегда соответствует конкретному мастер-файлу. Поэтому в HDR-процессе полезно предварительно определить, откуда берутся метаданные: из источника, из переменных проекта или из фиксированного утверждённого профиля.

Если один workflow должен принимать и SDR, и HDR, удобнее сначала определить тип источника, записать признак в переменную и развести материалы через Conditional. Тогда SDR не попадёт в HDR-ветвь случайно, а для HLG/PQ можно использовать разные presets. Такая схема прозрачнее, чем один Custom FFmpeg command с большим количеством условных параметров.

Аудиодорожки, каналы и нормализация

В FFAStrans понятия track и channel разделены. Один audio stream может содержать несколько каналов, а файл может содержать несколько streams. Для broadcast это принципиально: восемь каналов могут быть оформлены как восемь моно-дорожек, четыре стереодорожки или один многоканальный stream, и внешняя система воспринимает эти варианты по-разному.

Опция Discrete tracks задаёт число выходных streams. Total channels определяет суммарное количество каналов и распределяет их по выбранным дорожкам. Source channels as tracks раскладывает каждый исходный канал в отдельную моно-дорожку. Same as source пытается воспроизвести исходную структуру, если выбранный muxer допускает такое расположение.

Custom channel mapping нужен, когда автоматической схемы недостаточно. В отдельном окне для каждой дорожки задаётся, какие исходные каналы попадут в выход. Это позволяет, например, взять многоканальный мастер и сформировать стерео-прокси либо сохранить отдельные языковые пары. Если выходных каналов больше, чем есть во входе, система может заполнить отсутствующие каналы тишиной.

Почему восемь каналов не описывает программу

Число само по себе не говорит, что находится внутри. В одном файле каналы 1–2 могут быть stereo mix, 3–4 — M&E, 5–6 — комментарий, 7–8 — резерв; в другом — L, R, C, LFE, Ls, Rs и дополнительные дорожки. Поэтому mapping нельзя строить только по количеству. Лучше иметь документированное правило конкретного ingress и проверять его на sample-файлах.

Если layout определяется по имени или метаданным, Populate Variables может сохранить тип аудиосхемы, а Conditional — выбрать нужный preset. Такой подход безопаснее одного универсального Channel Mapper, который предполагает одинаковый смысл дорожек для всех источников.

Normalize и Loudness — не одно и то же

Normalize увеличивает уровень до максимально возможного без клиппинга. Он ориентируется на пик и не гарантирует одинаковую воспринимаемую громкость у двух разных программ. Loudness Analyzer оценивает материал по EBU-R128, а Conform volume использует измерение при последующем кодировании. Если заказчик требует конкретную loudness policy, нужно строить схему вокруг анализа, а не вокруг максимизации пика.

В типовом процессе Loudness стоит до encoder. Если измерение показывает допустимое значение, Conditional может отправить материал напрямую в профиль без коррекции; если нет — используется encoder с conform. Это помогает избежать лишнего gain там, где исходник уже соответствует требованиям.

Таймкод и временная структура

Видеопроизводство часто зависит от исходного timecode. В encoder-профилях, где доступно поле start TC, значение можно взять из встроенной переменной источника или задать статически. Это позволяет сохранить временную привязку либо создать новый мастер с заранее определённым стартом.

Timecode Filter решает другую задачу: он визуально прожигает значение в изображение. Такой burn-in полезен для screener, review и согласования, но не заменяет timecode metadata. Для production удобно делать отдельную proxy-ветвь с burn-in, оставляя master без графической надписи.

При изменении fps следует понимать, что временная шкала и номера кадров могут перестать соответствовать исходнику один к одному. Если downstream требует точный исходный таймкод, преобразование 25→29.97 или обратное должно быть частью осознанной спецификации. Простое принудительное поле Framerate без проверки результата может разрушить ожидаемую синхронизацию с EDL, субтитрами или внешними метаданными.

Рабочий кэш и жизненный цикл файла

Каждый job имеет рабочий каталог, в котором FFAStrans и processor nodes размещают промежуточные файлы. Custom FFmpeg автоматически выводит результат в текущий work folder и обновляет s_source. A/V Media и фильтры также создают служебные данные. Понимание этого жизненного цикла помогает проектировать схему без лишних копирований.

Если encoder создал временный результат, но Delivery Folder ещё не выполнился, файл остаётся частью job. После успешного окончания work folder обычно очищается. Поэтому на финальный путь нельзя полагаться до delivery, а внешней системе не стоит передавать внутренний cache path как постоянный адрес.

Keep only failed job work folders полезен именно потому, что сохраняет то, что обычно исчезло бы. По остаточным файлам можно понять, на каком этапе сформирован неверный результат. После диагностики такие каталоги следует удалять по политике хранения, иначе failed jobs со временем займут значительный объём.

Когда использовать Localize file

Localize file в Folder Monitor делает рабочую локальную копию принятого источника. Это полезно, если исходное сетевое хранилище медленное, нестабильное или не должно испытывать множество повторных чтений encoder. Локализация также упрощает farm-сценарий, если последующая обработка выполняется на том же host, который получил локальную копию.

Но localize удваивает входной трафик и требует места под исходник. Для очень больших mezzanine-файлов копирование перед каждым job может быть дороже прямого чтения с SAN. Решение выбирают по архитектуре хранения, а не как универсальную настройку для скорости.

Имена, метаданные и маршрутизация

Автоматизация становится надёжной, когда имя и путь результата строятся по явным правилам. Встроенные file variables дают исходное имя, каталог и полный путь. Time variables добавляют дату/время. User variables могут хранить project code, язык, тип материала и любой признак, полученный из имени или внешней системы.

Специальная форма обращения к исходному пути позволяет взять имя родительского каталога на один или несколько уровней выше. Это удобно, когда структура входа сама несёт бизнес-данные: например, \share\inbound\CLIENT\PROJECT\clip.mxf. Тогда часть дерева можно использовать для построения delivery path, не разбирая строку регулярным выражением.

Regex для имён

Функция регулярного выражения извлекает фрагмент из строки. Для имени с кодом эпизода можно получить только EP0013 и использовать его в названии выхода. Такой парсинг лучше сопровождать проверкой: если выражение ничего не нашло, Conditional переводит job в ветвь с quarantine, а не формирует пустое или неоднозначное имя.

Чем больше логики скрыто в filename convention, тем важнее иметь тестовый набор плохих имён. Ошибочная строка не должна привести к записи в корень share, перезаписи чужого файла или созданию каталога с буквальным текстом неразрешённой переменной.

JSON от внешней системы

HTTP communicate может вернуть структурированные данные, которые сохраняются в variable. Дальше функции чтения JSON/массивов извлекают нужные поля. Это позволяет, например, запросить у MAM целевой profile и destination по asset ID, а затем выбрать encoder и folder автоматически.

При такой интеграции следует предусмотреть три независимых ошибки: HTTP недоступен, ответ не является ожидаемым JSON, обязательное поле отсутствует. Каждая ситуация должна иметь понятную ветвь и сообщение. Иначе downstream получит пустую переменную, а истинная причина потеряется несколькими узлами раньше.

Подробно о Command Executor

Command Executor превращает FFAStrans в оркестратор внешних программ. В поле Command указывается полная команда с переменными. Для встроенных команд Windows может понадобиться запуск через системную командную оболочку. Пути с пробелами следует заключать в кавычки, иначе ошибка будет зависеть от конкретного имени файла и проявляться нестабильно.

Процессор ждёт завершения команды. Exit code больше нуля обычно переводит processor в error-state. Это полезно: внешний QC, checksum-tool или внутренний скрипт может сообщать FFAStrans о результате обычным системным способом. Если скрипт всегда возвращает 0 даже при проблеме, workflow не сможет отличить успех от сбоя без дополнительного анализа stdout.

Read std-stream to variable сохраняет stdout и/или stderr в строковую переменную. После этого Populate Variables может извлечь значение регулярным выражением, а Conditional — принять решение. Так интегрируются утилиты, у которых нет собственного FFAStrans plugin.

Set s_source variable to позволяет объявить файл, созданный внешней командой, новым текущим source. Это ключевой шаг, если команда не просто проверяет файл, а генерирует результат. Без него следующий encoder продолжит работать с прежним источником.

Команды удаления и перемещения

Файловые команды можно использовать для удаления или перемещения оригинала после успешной доставки. Но такой узел должен находиться в конце success-path и запускаться только после подтверждённого результата. Удалять источник сразу после encoder опасно: последующий FTP/Folder Delivery может завершиться ошибкой, и повторный запуск потеряет оригинал.

Если нужно убрать запись watch folder, также важно понимать эффект: удаление history record при всё ещё существующем файле может создать цикл повторного подхвата. Любая операция с monitor cache должна быть связана с реальным жизненным циклом файла.

DVD, stills и специализированные выходы

DVD Encoder

DVD Encoder создаёт совместимый MPEG-2 и способен формировать ISO. Внутри используются инструменты авторинга, поэтому узел решает больше, чем обычный выбор mpeg2video. Есть режим transwrap, который пытается привести уже подходящий поток без полного перекодирования. При выборе ISO результат рассчитан на запись или дальнейшую работу как образ диска.

Хотя DVD сегодня встречается реже, этот encoder важен для архивных production-цепочек и организаций, где физические носители сохраняются в регламенте. Его не стоит заменять произвольным MPEG-2 preset, если downstream ожидает именно DVD-структуру.

Stills Encoder

Stills Encoder превращает видео в изображения или последовательность кадров. В сочетании с условием и variables это может быть генерация кадров для QC, превью или дальнейшей внешней обработки. При последовательностях naming должен включать номер кадра, чтобы файлы сортировались однозначно и не перезаписывали друг друга.

Audio extraction

Audio extraction выводит звук в один или несколько файлов. Это полезно, когда downstream-аудиопроцесс отделён от видеопроцесса, либо когда нужно передать отдельные stems. Раскладку дорожек всё равно следует проверить заранее: физическое количество streams и логический смысл каналов определяют, сколько файлов должно появиться и что каждый из них содержит.

API-интеграция как часть production-системы

Через API FFAStrans можно запускать без watch folder. Внешняя система передаёт source, workflow ID, при необходимости стартовый processor и user variables. Такой вариант лучше мониторинга каталога, когда MAM уже знает момент готовности файла и имеет все метаданные: не нужно опрашивать storage и повторно извлекать бизнес-контекст из имени.

Приоритет API-job по умолчанию соответствует workflow, но может быть переопределён при submit. Это позволяет MAM различать срочные задачи и обычный background ingest. При этом не стоит давать всем запросам максимальный priority: иначе планировщик теряет смысл, а тяжёлые срочные задания будут постоянно вытеснять обычную очередь.

Статус job можно использовать для обратной связи. Вместо периодического просмотра GUI интеграция опрашивает состояние, получает финальный result и записывает его в карточку asset. Если workflow сформировал несколько выходов, их пути лучше сохранять в явные variables или sidecar-данные, а не пытаться угадать по имени после завершения.

Безопасность и разделение ролей

API и web-интерфейс не отменяют файловые права. Даже если пользователь имеет право запустить workflow через браузер, движок должен иметь отдельный доступ к источнику и destination. Хорошая схема разделяет операторский доступ к форме задания, административный доступ к Workflow Manager и служебные credentials, под которыми FFAStrans читает NAS/SAN.

Парольная защита workflow предназначена от случайного редактирования, а не заменяет политики доступа Windows и сети. Критические share и серверы должны защищаться на уровне файловой системы и инфраструктуры.

Web Manual Review как контролируемая точка принятия решения

Manual Review полезен не только как кнопка продолжить. Он превращает участок автоматического графа в формализованную операционную процедуру. До review машина может выполнить ingest, анализ и proxy; человек получает подготовленный контекст и выбирает один из разрешённых downstream-вариантов.

Например, QC workflow может иметь варианты Approve, Re-encode, Send to correction. Каждый вариант — реальный processor после Manual Review. Пользователь не редактирует graph и не вводит произвольный путь, а только выбирает действие из тех, которые предусмотрел инженер. Это снижает риск обхода обязательных стадий.

Форма webui дополняет выбор метаданными: текстовым комментарием, категорией, датой, checkbox или select. Значения становятся variables и могут попадать в имя выходного файла, sidecar, HTTP-запрос или e-mail. Таким образом, ручное решение остаётся частью того же job и не теряется в отдельной переписке.

Как выбирать между стандартным encoder и Custom FFmpeg

Стандартный encoder предпочтительнее, когда он покрывает требуемый формат. Его поля ограничивают возможные комбинации и делают профиль понятным другому инженеру. XDCAM-HD, XAVC, DNxHR или H.264 preset читается прямо на графе; для Custom FFmpeg приходится анализировать набор параметров командной строки.

Custom FFmpeg оправдан, если нужен codec, muxer, mapping или фильтр, отсутствующий в готовом узле. Также он удобен для remux и экспериментальных профилей. Но чем больше command line, тем важнее оформить его как preset, дать узлу понятное имя и вынести изменяемые части в variables.

Не стоит использовать Custom FFmpeg только потому, что знакомее командная строка. Это лишает часть workflow встроенных проверок, UI-подсказок и стандартного channel mapping. Наоборот, не нужно пытаться заставить специализированный encoder решать задачу, для которой он не предназначен: тогда короткий Custom FFmpeg будет прозрачнее.

Производительность без выдуманных ускорений

Скорость FFAStrans определяется реальной работой FFmpeg/AviSynth, выбранным codec, фильтрами, storage и числом параллельных job. Сам workflow engine не может сделать x264 или сложный AviSynth-фильтр быстрее выбранных настроек. Поэтому оптимизация начинается с понимания, где расходуется время.

Transwrap экономит ресурсы, если поток уже соответствует профилю. Отказ от ненужного A/V decode и фильтров также сокращает обработку. С другой стороны, если нужен Watermark, Resize или точная color conversion, декодирование неизбежно. Попытка ускорить задачу stream copy там, где контент должен измениться, технически невозможна.

Farm увеличивает throughput, распределяя независимые processor jobs по нескольким host. Он не превращает один последовательный processor в бесконечно параллельный. Выигрыш особенно заметен на потоке множества файлов, когда несколько worker могут кодировать разные job одновременно.

Storage способен стать ограничением раньше CPU. Несколько worker, читающих большие mezzanine из одного NAS и одновременно пишущих туда результаты, создают конкуренцию за сеть и диски. В такой ситуации увеличение числа encoder slots может ухудшить общий throughput. Localize file, отдельный work cache и разумное число параллельных задач иногда дают больше эффекта, чем добавление ещё одного worker.

Минимальный план внедрения FFAStrans

  1. Зафиксировать входные типы файлов и источники: folder, FTP, camera structure или API.
  2. Определить один обязательный выход и собрать короткий workflow без дополнительных ветвей.
  3. Проверить naming, права service account и delivery на тестовом share.
  4. Добавить анализ interlace/audio только там, где он влияет на решение.
  5. Добавить error-path для encoder и delivery, прежде чем подключать e-mail и внешние интеграции.
  6. Вынести постоянные пути в statics, переменные job — в Populate Variables.
  7. Сохранить согласованные encoder settings как presets.
  8. После стабильной одиночной обработки подключить watch folder или API-автоматизацию.
  9. Farm включать после того, как один host надёжно выполняет тот же workflow и все сетевые пути стандартизованы.
  10. Web-интерфейс добавлять, когда нужно отделить операторов от Workflow Manager или предоставить Manual Review.

Такая последовательность уменьшает число одновременно неизвестных факторов. Если начать сразу с farm, web UI, пяти ветвей и внешнего MAM, любая ошибка может находиться в десятке мест. Короткий рабочий pipeline даёт эталон, к которому добавляются функции по одной логической группе.

Сравнение FFAStrans с аналогами

ПрограммаЛучше подходит дляГлавное ограничение
FFAStransСложных автоматических media-workflow с watch folder, ветвлением, variables, FFmpeg/AviSynth и собственной farmВысокий порог проектирования и много технических параметров
Telestream VantageКрупных вещательных и корпоративных media supply chain с интеграциями, QC, масштабированием и профессиональной поддержкойКоммерческая enterprise-платформа с существенно более высокой стоимостью владения
FileFlowsУниверсальной автоматической обработки файлов и видео через наглядные flows, плагины и распределённые processing nodesПрофессиональные broadcast-профили и AviSynth-специфика FFAStrans не являются его основной специализацией
TdarrМассовой условной перекодировки и remux медиатек с распределением CPU/GPU workersОриентирован прежде всего на обслуживание библиотек, а не на broadcast ingest/delivery workflow
Adobe Media EncoderОчередей экспорта, presets и watch folders в связке с Premiere Pro и After EffectsНет такого уровня произвольного node-based ветвления и серверной оркестрации

FFAStrans логичнее выбирать, когда нужно бесплатно построить собственную автоматическую цепочку вокруг FFmpeg/AviSynth, контролировать ветвления, broadcast-кодировщики, переменные и серверные пути. Telestream Vantage сильнее как готовая enterprise-экосистема с широким набором коммерческих модулей и сопровождением. FileFlows и Tdarr удобнее для современной универсальной или библиотечной автоматизации, особенно когда важны разнородные платформы и web-управление. Adobe Media Encoder проще для креативной команды, которой в первую очередь нужны presets, очередь и watch folders без построения сложной логики обработки.

ВидеоМАСТЕР в эту таблицу не включён: его основная задача — пользовательская конвертация и базовая обработка видео, тогда как FFAStrans относится к классу workflow-движков, где центральны автоматический приём файлов, ветвление, переменные, мониторинг, интеграции и распределённое выполнение.

Кому подходит FFAStrans

Программа лучше всего подходит инженерам, техническим редакторам и небольшим/средним media-отделам, которым нужна повторяемая обработка без покупки крупной enterprise-платформы. Она особенно полезна, если уже понятно, какие форматы приходят на вход, какие house profiles требуются, где расположены сетевые хранилища и какие действия должны происходить при исключениях.

Для человека, которому раз в неделю нужно просто превратить один MP4 в другой MP4, FFAStrans может оказаться избыточным: сначала придётся понять canvas, node categories, переменные, naming и states. Но когда появляется второй профиль, watch folder, несколько источников, условие по параметрам и автоматическая доставка, сложность начинает окупаться тем, что ручные операции превращаются в одну устойчивую схему.

Что важно запомнить перед настройкой

  • Сначала описывается процесс: откуда приходит файл, какие проверки обязательны, какие выходы нужны и что считать ошибкой.
  • Монитор папки хранит историю; Rebuild History и Clear History напрямую влияют на повторную обработку старых файлов.
  • Переменные относятся к job, а statics — к общей конфигурации среды.
  • Для фильтров AviSynth входные потоки должны быть согласованы по ключевым видео- и аудиопараметрам.
  • Custom FFmpeg нужен для нестандартного кодирования, Command Executor — для произвольных внешних действий.
  • Loudness сначала измеряется, затем результат используется encoder для conform volume.
  • Transwrap не является гарантией копирования: профиль должен соответствовать фактическому видеопотоку.
  • В farm все выбранные host должны видеть входы, зависимости и выходы по согласованным путям.
  • Error branch следует проектировать так же внимательно, как обычный success-path.
  • Web-интерфейс и API расширяют способы подачи задач, но основная логика остаётся в workflow.

Итог

FFAStrans — инструмент не столько для отдельной конвертации, сколько для формализации медиапроцесса. Его сильные стороны — визуальный граф, watch folders, большой набор специализированных encoder и AviSynth-фильтров, variables/statics, условные ветви, error handling, внешние команды, API, web-доступ и farm. Из этих блоков можно собрать как короткую очередь Folder → H.264 → Delivery, так и многоступенчатый production pipeline с анализом, несколькими форматами, ручным review и интеграцией с MAM.

Главная сложность — необходимость заранее понимать сам технологический процесс. FFAStrans не скрывает от пользователя codec details, аудиораскладку, interlace, пути, состояния и правила обработки. Зато после корректной настройки эта же детализация превращается в преимущество: workflow становится воспроизводимым, видимым на схеме и пригодным для автоматической обработки больших потоков без постоянного ручного запуска каждого файла.