← Блог

Remotion вместо ffmpeg: программное видео для вайбкодеров

Сережа Рис · 24 February 2026

автоматизациявидеоremotion

Remotion — лучший инструмент для генерации видео через AI-агента. React-компоненты читаемы для модели, параметры передаются через JSON, preview работает прямо в браузере. Я попробовал четыре варианта и остановился на нём.

Задача простая: хочу, чтобы агент собирал промо-ролики из данных. Передаю название продукта, слоган, цвета бренда — получаю MP4 на выходе. Без ручной работы, без After Effects, без дизайнера. О видео-пайплайне целиком писал раньше — там субтитры, превью, загрузка. Сейчас — про генерацию самого видео.

Что рендерим

Промо-ролик на 10–15 секунд. Лого влетает сверху, название появляется с fade-in, слоган выезжает снизу, в конце — CTA-кнопка. Параметры: название компании, слоган, цвета бренда. Один шаблон, разные данные на входе.

На словах просто. На деле — анимация это время, кадры, координаты, easing. И у каждого инструмента свой язык для описания всего этого. Мне было важно одно: какой язык лучше всего читается моделью.

Подход 1: ffmpeg

Первая идея — ffmpeg. Он и так уже в моём пайплайне для сборки видео. Промпт был такой:

Промпт для Claude Code на Opus 4.6:

Сгенерируй ffmpeg команду: видео 1280x720, 10 секунд, текст “sereja.tech” в центре с fade-in за первую секунду, лого в правом верхнем углу, экспорт в MP4.

Агент сгенерировал. Команда заняла восемь строк. Фильтрграф выглядел как [0:v]overlay=x=W-w-10:y=10[bg];[bg]drawtext=text='sereja.tech':fontsize=48:fontcolor=white@0:enable='between(t,0,1)':fontcolor_expr=white@%{eif\\:min(t,1)\\:d}[out].

Проблемы:

Дебаг вслепую. Чтобы увидеть результат — дождись рендера. Опечатка в фильтрграфе? Перезапуск. Итерации занимают минуты.

Синтаксис не для агентов. Экранирование, вложенные выражения, зависимости между фильтрами. На простых командах агент справляется, но стоит добавить анимацию — путает скобки и обратные слеши.

Параметризации нет. Поменять текст или цвет — пересобирать всю команду целиком. Нельзя просто передать JSON и получить видео.

ffmpeg отлично режет, склеивает, конвертирует. Но генерировать анимации через фильтрграфы — это пытка. И для человека, и для модели.

Подход 2: Playwright

Второй вариант — записать CSS-анимацию в видео. HTML я уже использую для карточек и превью, Playwright умеет записывать видео страницы.

Промпт для Claude Code на Opus 4.6:

Создай HTML-страницу с CSS-анимацией: текст появляется, лого сдвигается. Потом запусти Playwright, запиши видео через page.video.start(), сохрани MP4.

Агент собрал страницу, запустил Playwright, получил MP4. Визуально — красиво. А потом я запустил второй раз.

Timing-based запись. Playwright пишет видео в реальном времени. Анимация на 10 секунд — 10 секунд записи. Если система нагружена, кадры дропаются. Результат зависит от загрузки CPU в момент записи.

Недетерминированность. Два запуска на одних данных дают слегка разный результат. Для превью это допустимо, для продакшн-видео — нет.

Нет покадрового контроля. CSS-анимации работают по времени, а не по кадрам. Нельзя сказать “на кадре 30 текст полностью видим”. Только “через 1 секунду”. А сколько кадров в этой секунде — зависит от производительности.

Для статичного визуала Playwright работает лучше — скриншоты детерминированы. Но видеозапись через него — хрупкая конструкция.

Подход 3: Motion Canvas

Motion Canvas — open-source фреймворк для программных анимаций. TypeScript, генераторы через yield*, покадровый контроль.

Промпт для Claude Code на Opus 4.6:

Создай Motion Canvas сцену: круг появляется с масштабированием, текст “sereja.tech” вылетает снизу. Используй yield* для последовательности анимаций.

Агент сгенерировал сцену. Синтаксис с генераторами выглядит понятно:

yield* circle().scale(1, 0.6);
yield* text().y(0, 0.8, easeOutBack);

Но всплыли ограничения.

Только Canvas API. Motion Canvas рисует всё через 2D Canvas. Нет HTML, нет CSS, нет flexbox. Текст — через ctx.fillText(), фон — через ctx.fillRect(). Для сложных layout это откат к ручному позиционированию.

Нет headless CLI. Чтобы отрендерить видео, нужно запустить dev-сервер и нажать кнопку в браузере. Автоматизация через Playwright возможна, но это костыль поверх костыля.

Темп разработки снизился. 18k звёзд на GitHub, MIT-лицензия — но последний стабильный релиз был в 2024-м. Для продакшн-зависимости это жёлтый флаг.

По-моему, Motion Canvas — инструмент для тех, кто пишет код руками и любит контролировать каждый кадр. Для агентского пайплайна с headless рендером — не вариант.

Подход 4: Remotion

Remotion перевернул задачу. Вместо “запиши экран” или “нарисуй на Canvas” — “опиши анимацию как React-компонент, а мы отрендерим покадрово”.

Промпт для Claude Code на Opus 4.6:

Создай Remotion-компонент PromoVideo. Параметры: title (string), subtitle (string), brandColor (string). Анимируй появление title через interpolate() в первые 30 кадров, потом subtitle. В финале — CTA с кнопкой.

Агент создал компонент. Разница с предыдущими тремя подходами — моментальная.

Декларативность

Компонент описывает что происходит на каждом кадре, а не как записать экран:

const frame = useCurrentFrame();
const opacity = interpolate(frame, [0, 30], [0, 1]);

return <h1 style={{ opacity }}>{title}</h1>;

Модель читает это как обычный React. Не нужно знать ffmpeg-синтаксис или Canvas API. Claude, GPT, Gemini — все генерируют JSX без проблем, потому что React-кода в обучающих данных больше, чем чего-либо ещё.

Параметризация через props

Один компонент, разные данные:

{
  "title": "sereja.tech",
  "subtitle": "Вайбкодинг и автоматизация",
  "brandColor": "#6366f1"
}

JSON на входе, MP4 на выходе. Шаблон не меняется. Агент генерирует данные, Remotion рендерит.

Preview без рендера

@remotion/player показывает видео прямо в браузере. Перемотка, пауза, покадровый просмотр — мгновенно. Агент может открыть preview через Playwright, сделать скриншот конкретного кадра и проверить результат до рендера.

Покадровый рендер

Под капотом Remotion делает так: headless Chrome рендерит каждый кадр как скриншот, потом ffmpeg собирает PNG в видео. Детерминированно — один и тот же вход всегда даёт один и тот же результат.

Props/JSON
    │
    ▼
┌──────────────────┐
│  React Component │  JSX + useCurrentFrame()
│  (шаблон)        │  + interpolate()
└──────────────────┘
    │
    ▼
┌──────────────────┐
│  Headless Chrome │  Рендер каждого кадра
│  (puppeteer)     │  → PNG-скриншоты
└──────────────────┘
    │
    ▼
┌──────────────────┐
│  ffmpeg          │  PNG → MP4/WebM
│  (сборка)        │
└──────────────────┘
    │
    ▼
   video.mp4

CLI для автоматизации

Агент запускает одну команду — и получает файл. Никаких браузерных кнопок, никаких dev-серверов.

Lambda для масштаба

Если нужно рендерить много роликов — @remotion/lambda распределяет работу по AWS Lambda. Каждый кусок видео рендерится параллельно. Для пакетной генерации промо-роликов — самое то.

Сравнение

Критерий ffmpeg Playwright Motion Canvas Remotion
Читаемость для LLM Низкая (фильтрграфы) Средняя (HTML/CSS) Средняя (генераторы) Высокая (React/JSX)
Параметризация Нет (пересборка команды) Частичная (CSS-переменные) Через код Props + JSON
Покадровый контроль Да Нет Да Да
Детерминированность Да Нет Да Да
Headless CLI Да Да Нет Да
Preview Нет Браузер Dev-сервер + кнопка Player в браузере

Remotion закрывает все шесть критериев. ffmpeg — три из шести, но с нечитаемым синтаксисом. Playwright проигрывает на детерминированности. Motion Canvas — на автоматизации.

Что стоит знать

Зависимость от Chrome. Remotion рендерит через headless Chrome. Это нестабильная точка: обновления Chrome могут сломать рендер, потребление памяти высокое. Для CI/CD нужно фиксировать версию.

Скорость. Локальный рендер — медленный. Каждый кадр проходит через Chrome. Для 10-секундного ролика при 30 fps это 300 скриншотов. Lambda решает проблему, но добавляет AWS в стек.

Лицензия. Бесплатно для индивидуалов и команд до трёх человек. Дальше — от $100 в месяц ($25/разработчик + $10/1000 рендеров). Для соло-вайбкодера ограничений нет.

React как зависимость. Remotion построен на React. Но это скорее плюс: React — один из самых представленных фреймворков в обучающих данных. Любая модель генерирует JSX уверенно.

Выводы

Я уже генерирую превью, карточки, OG-картинки через HTML и Playwright. Видео — та же логика, только с временной осью.

Remotion делает эту ось управляемой. React-компоненты описывают анимацию, props параметризируют контент, CLI автоматизирует рендер. Для вайбкодера, который направляет агента через промпты, это идеальный формат: декларативно, предсказуемо, читаемо для модели.

Видео как часть контент-пайплайна — уже реальность. Статья, OG-картинка, промо-ролик — всё из одного набора данных, всё собирается агентом.


FAQ

Remotion подходит для длинных видео?

Для коротких промо-роликов, интро, анимированных объяснений — идеально. Для длинных видео (лекции, скринкасты) Remotion избыточен: проще записать экран и обработать через ffmpeg. Покадровый рендер через Chrome на часовом видео будет слишком медленным.

Можно ли использовать Remotion без знания React?

Формально — нет, Remotion построен на React. Практически — агенту достаточно промпта с описанием анимации. Claude Code генерирует Remotion-компоненты так же уверенно, как обычные React-компоненты. Знание React нужно для отладки, не для генерации.

Чем Remotion лучше After Effects с автоматизацией?

After Effects требует лицензию, автоматизация через ExtendScript и aerender ограничена, проекты не версионируются через git. Remotion — код в репозитории, запуск из CLI, параметризация через JSON. Для агентского воркфлоу — принципиальная разница.

Motion Canvas догонит Remotion?

Motion Canvas — хороший инструмент с другой философией: Canvas API вместо DOM, генераторы вместо покадровых функций. Если появится headless CLI и вырастет активность — станет конкурентом. Пока разрыв в экосистеме и автоматизации слишком большой.

Подписаться на обновления — @sereja_tech