Автоматизация создания видео обычно буксует не на сценарии и не на озвучке. Текст пишет нейросеть, голос даёт синтез речи, клипы берутся из стока или генерируются. Застревает всё на последнем шаге: из кучи отдельных файлов нужно собрать один MP4, где картинка, звук и субтитры идут синхронно.
На своём сервере этот шаг решается одной командой FFmpeg. В облачной версии n8n такой возможности нет, и привычный ответ с форумов «просто вызовите FFmpeg» перестаёт работать. Ниже я разбираю паттерн, которым с этим справляется автор одного из конвейеров коротких видео. Он описал его в разделе Built with n8n на форуме сообщества n8n, в теме «Assembling clips + voiceover + SRT captions into one MP4 on n8n Cloud (no Execute Command node)».
Сразу оговорка про источник. Автор публикации, пользователь agentutilitylabs, сам сделал платный сервис для этого шага и прямо об этом пишет. Поэтому я отделяю общий паттерн, который работает с любым инструментом, от конкретного продукта и его условий. После статьи будет понятно, как устроена сборка без доступа к серверу, что подготовить заранее и где у этого подхода потолок.
В чём задача: последний метр видео-конвейера
Короткое вертикальное видео в автоматическом конвейере проходит четыре стадии. Автор материала описывает их так:
- Сценарий.
- Клипы: сток, видео от нейросети или собственная съёмка.
- Озвучка: синтез речи (TTS) или запись голоса.
- Субтитры в формате SRT с таймингами.
SRT — простой текстовый формат субтитров. Каждая строка текста привязана к отрезку времени «с такой-то секунды по такую-то». Плеер или программа монтажа по этим меткам понимает, когда показывать фразу.
Первые три стадии в n8n собираются из стандартных блоков: запрос к языковой модели, запрос к сервису озвучки, поиск или генерация клипов. Четвёртый шаг — сборка — требует обработки видео. Надо привести все клипы к одному размеру кадра, склеить их по очереди, положить под них голос и вшить субтитры прямо в изображение.
Вшитые субтитры (по-английски burn in) становятся частью картинки. Отдельной дорожки, которую зритель может выключить, у них нет. Для соцсетей это обычный выбор: ролик выглядит одинаково везде, куда его загрузили.
Почему в n8n Cloud не работает FFmpeg
FFmpeg — консольная утилита, которая умеет почти всё с видео и звуком: резать, склеивать, менять размер, накладывать текст. В n8n её вызывают через ноду Execute Command. Эта нода выполняет команду операционной системы на той машине, где работает n8n.
Если n8n стоит на вашем сервере, вы ставите туда FFmpeg и вызываете его из воркфлоу. Как пишет автор материала, в n8n Cloud ноды Execute Command нет. Значит, нет и способа запустить на сервере произвольную программу. Видео придётся собирать где-то ещё.
Судя по соседним темам форума, вопрос всплывает регулярно. Рядом с разобранной публикацией лежат обсуждения про вшивание субтитров из облачной версии, про нарезку длинных роликов на вертикальные клипы с подписями и вопрос, есть ли у fal эндпоинт для склейки аудио, видео и субтитров. Задача массовая, а готового ответа внутри самой платформы нет.
Как работает автоматизация создания видео без Execute Command
Паттерн из материала укладывается в одну фразу: тяжёлую обработку отдают внешнему API, а n8n только передаёт ему ссылки и забирает результат.
Шаг сборки выглядит так:
- n8n отправляет в сервис публичные URL клипов, публичный URL файла озвучки и текст SRT;
- сервис масштабирует и обрезает каждый клип под один размер кадра;
- склеивает клипы в заданном порядке;
- кладёт озвучку под видеоряд;
- вшивает субтитры;
- возвращает готовый MP4, который n8n дальше загружает на площадку или публикует.
Обратите внимание на слово «публичные». Сервис сборки сам скачивает файлы по ссылкам. Если клип лежит в закрытом хранилище или за авторизацией, сборщик его не увидит. Поэтому промежуточные файлы конвейера должны жить там, откуда их можно забрать по прямой ссылке.
Для того, кто делает контент, у такого подхода два следствия. Хорошее: n8n Cloud остаётся облачным, сервер админить не нужно, а сборка ролика — это один HTTP-запрос в воркфлоу. Плохое: самая дорогая и капризная часть конвейера переезжает к стороннему сервису, и его ограничения становятся вашими.
Что подготовить до сборки: три ловушки из материала
Автор перечисляет, на чём споткнулся, пока собирал пример. Все три пункта относятся не к конкретному сервису, а к любой автоматической склейке.
Клипы со «служебным» мусором
Стоковые и агентские видео часто начинаются с титульной заставки или содержат вшитые чёрные полосы сверху и снизу (letterbox). Автоматический сборщик не отличит заставку от содержания. Он честно вставит её в середину ролика, а полосы растянет вместе с кадром.
Совет автора — брать чистые клипы или обрезать их заранее. Для конвейера это означает отдельный шаг отбора или проверки исходников. Пропустить его можно только тогда, когда источник клипов заведомо чистый, например собственная генерация.
Хостинги, которые не отдают файлы роботам
Некоторые площадки блокируют запросы без нормального заголовка User-Agent. Это строка, которой программа представляется серверу. В материале в пример приведена Wikimedia. Конвейер падает на скачивании, и снаружи это выглядит как «сервис сборки не работает».
Проверять стоит то звено, которое реально скачивает медиа. Если это внешний сборщик, нужно убедиться, что он отправляет User-Agent. Если файл предварительно перекладывает сам n8n, заголовок задаётся в HTTP-запросе.
Субтитры по сценарию вместо субтитров по голосу
Самая коварная ловушка. Тайминги субтитров надо выставлять по записанной озвучке, а не по тексту сценария. Паузы в живой речи и в синтезе отличаются от того, что предполагает текст, и субтитры начинают отставать или забегать вперёд.
На практике это, скорее всего, значит, что тайминги нельзя посчитать «по количеству слов» заранее. Их нужно снимать с готового аудио, вручную или отдельным инструментом распознавания речи. В примере автора 15 строк субтитров к 48-секундному ролику расставлены руками.
Варианты сборки: свой FFmpeg, видео-API, Apify Actor
Автор выделяет три пути для шага сборки. Свёл их в таблицу. Всё, что про цены и лимиты конкретных сервисов не сказано в материале, я не заполняю: условия нужно смотреть в документации каждого.
| Вариант | Где работает | Что даёт | Что учесть |
|---|---|---|---|
| FFmpeg через Execute Command | только n8n на своём сервере | полный контроль над обработкой | нужен сервер, установка FFmpeg и умение писать команды |
| Готовые видео-API: Creatomate, RenderIO, Shotstack и подобные | любая версия n8n, через HTTP-запрос | сборка без своего сервера | условия, форматы входа и цены — по документации каждого сервиса |
| Apify Actor автора материала с бесплатным шаблоном для n8n | любая версия n8n | склейка клипов, озвучки и субтитров в MP4 по описанному паттерну | платный, жёсткие лимиты по числу клипов и длине, см. следующий раздел |
Шаблон автора опубликован в библиотеке воркфлоу n8n под названием «Merge video clips, voiceover, and captions into an MP4 with Apify». Автор предлагает сначала запустить его без клипов: в таком режиме получается бесплатный демо-ролик.
Пример работы автор тоже приводит. Это вертикальное видео на 48 секунд из четырёх клипов NASA, находящихся в общественном достоянии, с озвучкой, записанной на телефон, и пятнадцатью строками субтитров. Масштаб честный: это демонстрация, а не производственная нагрузка.
Выбор между вариантами упирается не в качество картинки, а в то, где вы держите n8n. Есть свой сервер — FFmpeg бесплатен и гибок, но всю отладку вы делаете сами. Работаете в облаке — остаются внешние сервисы, и сравнивать их стоит по лимитам и цене за готовый ролик.
Границы и цена
Ограничения Apify Actor автор перечисляет сам. Я привожу их как есть, это условия на момент публикации в сообществе:
- не больше 10 клипов и не больше 60 секунд итогового видео;
- оригинальный звук клипов отбрасывается: без отдельной звуковой дорожки ролик выйдет беззвучным;
- тайминги субтитров вы готовите сами;
- обрезки отдельных клипов и автоматической расшифровки речи нет;
- готовый MP4 нужно скачать или сохранить, пока он лежит в хранилище Apify: у хранилища есть срок хранения.
Цена, по словам автора, — $0.20 за готовое видео. Если рендер падает, плата за сборку не списывается. Демо бесплатное.
Что из этого следует для реального конвейера. Лимит в 60 секунд закрывает короткие вертикальные форматы и не подходит для роликов длиннее минуты. Отсутствие обрезки клипов возвращает нас к ловушке с заставками: чистить исходники придётся до сборки, другим инструментом. Отсутствие расшифровки означает, что тайминги субтитров — отдельная задача, и её тоже надо где-то решить.
Есть границы и у самого паттерна, независимо от сервиса:
- Зависимость от стороннего API. Если сервис меняет условия, лимиты или закрывается, шаг сборки ломается целиком. Запасной вариант лучше продумать заранее.
- Публичные ссылки. Все промежуточные файлы должны быть доступны по URL. Для закрытых материалов клиента это может быть неприемлемо.
- Время на подготовку. Сборка — один запрос, но отбор чистых клипов и расстановка таймингов остаются работой. Автор примера выставлял субтитры руками.
- Хранение результата. Готовый файл живёт у сервиса ограниченное время. Шаг «забрать и сохранить к себе» обязателен в воркфлоу, иначе ролик пропадёт до публикации.
Где этот шаг в автоматизации производства видео
Мне в этом материале ценен не конкретный сервис, а то, как разложен конвейер. Автоматизация видео часто воспринимается как одна кнопка «сделать ролик». На деле это цепочка: сценарий, клипы, голос, тайминги, сборка, публикация. И у каждого звена свой характер сбоев.
Сборка в этой цепочке — самое механическое звено. Ему не нужен вкус, ему нужны чистые входные данные. Поэтому качество итогового ролика решается раньше: на отборе клипов и на таймингах субтитров. Именно там автор материала и споткнулся, и именно там, по его описанию, всё ещё нужна ручная работа.
Если смотреть так, выбор инструмента для сборки становится вопросом инфраструктуры, а не творчества. Свой сервер с FFmpeg, видео-API или готовый актор на Apify — это разные способы выполнить одну и ту же операцию: склеить, наложить звук, вшить текст.
Что с этим делать
- Сначала определите, где у вас n8n. На своём сервере проще и дешевле поставить FFmpeg и вызвать его через Execute Command. В n8n Cloud сразу закладывайте внешний сервис сборки.
- Проверьте, что все промежуточные файлы доступны по публичной ссылке. Без этого паттерн не работает ни с одним сборщиком.
- Вынесите подготовку исходников в отдельный шаг. Отбор клипов без заставок и чёрных полос, проверка, что хостинг отдаёт файлы с вашим User-Agent.
- Снимайте тайминги субтитров с готовой озвучки, а не со сценария. Если автоматической расшифровки нет, заложите время на ручную расстановку.
- Сравнивайте сервисы сборки по лимитам и цене за ролик, а не по демо. Длина, число клипов, судьба звука исходников и срок хранения результата решают, подойдёт ли сервис вашему формату. Перед подключением проверьте актуальные условия в документации.
