Дайджесты новостей
Многослойный коллаж из киноплёнки, векторных дорожек таймлайна и генерируемых кадров

Автоматизация монтажа коротких видео: связка DeepSeek V4.1 Flash и Open Design Motion

Если твоя команда регулярно публикует контент в Reels, Shorts или TikTok, ты прекрасно знаешь, сколько времени и денег сжигает ручной монтаж. Дизайнер часами режет паузы в монтажной программе, накладывает субтитры слово за словом, анимирует плашки и ждёт бесконечного рендеринга в Adobe After Effects.

Но что, если относиться к видео как к коду? Концепция Video-as-Code переворачивает этот процесс с ног на голову: вместо ручного кликанья мышкой мы создаём полностью программный конвейер. Я протестировал связку из высокоскоростной открытой модели DeepSeek V4.1 Flash и открытого движка Open Design Motion (nexu-io/open-design). Результат впечатляет: от исходной идеи до готового смонтированного ролика с кинетической типографикой проходит меньше полутора минут.

Давай разберём архитектуру и настроим рабочий скрипт сборки.

Архитектура: как работает программный монтаж

Конвейер состоит из трёх логических этапов:

  1. Генерация структуры сценария (DeepSeek V4.1 Flash). Модель получает тему и бриф, возвращая строго валидированный JSON-объект. В нём расписаны сцены, тайминги в миллисекундах, типы анимации (popIn, slideUp) и ключевые слова для цветового акцентирования («караоке-эффект»). DeepSeek здесь выигрывает у флагманов по скорости: генерация таймлайна занимает около трёх секунд при копеечной стоимости токенов.
  2. Декларативная верстка сцен (Open Design Motion). Шаблон ролика описывается на обычном JavaScript с использованием CSS-стилей и анимационного движка GSAP. Текст, подложки и переходы масштабируются векторно без пикселизации.
  3. Пакетная компиляция через Headless Chromium и FFmpeg. Браузер в фоновом режиме отрисовывает кадры на холсте, а утилита FFmpeg сшивает их в итоговый видеофайл MP4 с наложением фоновой музыки.

Ранее мы разбирали пайплайны автоматизации видеомонтажа, а теперь этот конвейер можно запустить полностью локально на открытом коде.

Практическая реализация: скрипт генерации таймлайна

Для запуска понадобятся Node.js и установленный системный пакет FFmpeg. Первым шагом создаём скрипт генерации сценария generate-timeline.js:

import fs from 'fs';
import { OpenCodeClient } from 'opencode-cli';

const client = new OpenCodeClient({
  model: 'deepseek/deepseek-v4.1-flash',
  apiKey: process.env.DEEPSEEK_API_KEY,
  temperature: 0.3
});

const prompt = `
Создай JSON-таймлайн для вертикального ролика Reels (1080x1920) на 30 секунд.
Тема: 3 правила работы с контекстным окном LLM.
Формат ответа строго JSON: массив scenes с полями text, durationMs, animationType и highlightWords.
`;

const response = await client.complete({ prompt, format: 'json' });
fs.writeFileSync('./src/scenes/timeline.json', JSON.stringify(response.data, null, 2));
console.log('Таймлайн успешно скомпилирован в timeline.json');

Шаблон моушн-композиции Open Design Motion

Второй компонент — шаблон композиции src/templates/ReelsTemplate.js, который считывает сгенерированный JSON и строит сцены:

import { Container, TextBlock } from '@nexu-io/open-design-motion';
import timeline from '../scenes/timeline.json';

export function buildMotionVideo(sceneGraph) {
  timeline.scenes.forEach((scene, index) => {
    const textNode = new TextBlock({
      content: scene.text,
      font: 'Inter Bold',
      fontSize: 64,
      color: '#FFFFFF',
      highlightColor: '#FFD700',
      highlights: scene.highlightWords
    });

    sceneGraph.addScene({
      id: `scene-${index}`,
      duration: scene.durationMs / 1000,
      elements: [textNode],
      transition: scene.animationType || 'slideUp'
    });
  });
}
Аппаратное ускорение рендеринга

При экспорте больших пачек видео обязательно включайте флаг аппаратного кодирования NVENC или VideoToolbox в настройках сборщика. Это ускоряет финальный рендеринг в 3–5 раз по сравнению с чистой процессорной сборкой.

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