August 6

Урок: автомонтаж вертикальных роликов через Claude Code

Пошаговая сборка с нуля. Человек кладёт снятое видео в папку, пишет одну строку — получает смонтированный ролик с субтитрами, графикой, плашками и музыкой.

Собрано на практике: каждая «грабля» ниже реально ломала сборку.


Что получится

На входе — сырая съёмка «говорящая голова». На выходе — вертикальный ролик 1080×1920: вырезаны паузы и фальш-старты, наложены субтитры, поверх лица живёт графика, в конце плашка с призывом, под всем — музыка.

Время сборки одного ролика: 5-15 минут машинного времени, участие человека — одна строка.


Что нужно

зачем

сколько стоит

Claude Code

мозг сборки: читает правила, режет, собирает

подписка Claude, тариф уточнить на сайте

Node.js 20+

среда

бесплатно

ffmpeg

резка, конвертация, звук

бесплатно

Remotion

рендер графики поверх видео

бесплатно для личного использования, для компаний — лицензия

Whisper

транскрипт с таймингами слов

бесплатно, локально

Звук и музыка

SFX и BGM

своё или по подписке

⚠️ Про Remotion честно: личное использование бесплатно, для команд и компаний нужна лицензия. Проверить условия на их сайте до того, как строить на этом бизнес.


Шаг 1. Установка

bash

mkdir ~/video-pipeline && cd ~/video-pipeline
npm init -y
npm i remotion @remotion/cli @remotion/google-fonts @remotion/layout-utils @remotion/media-utils react react-dom
npm i -D typescript@5.9.3 @types/react
brew install ffmpeg

🔴 Грабля номер один. TypeScript строго версии 5. Семёрка — это новый компилятор на Go, он отдаёт другой формат экспорта, и бандлер Remotion падает с typescript.sys.readFile. Ставить typescript@5.9.3 и не поднимать.

Транскрипт — одно из двух:

bash

brew install openai-whisper      # локально
npx hyperframes transcribe       # качает модель сам

Шаг 2. Структура папок

video-pipeline/
├── input/          ← сюда видео, РОВНО ОДИН файл
├── guide/          правила монтажа — их читает агент
├── src/pack/       компоненты графики
├── library/
│   ├── sfx/        звуки
│   ├── bgm/        музыка
│   └── media/      скриншоты и фото для вставок
└── out/            готовые ролики

🔴 Грабля. В input/ должен лежать один файл. Иначе агент однажды возьмёт недоудалённый прошлый ролик, и ты заметишь это только на готовом рендере. В инструкции агенту прописывается: файлов больше одного — остановиться и спросить.


Шаг 3. Правила в guide/

Ключевая идея всего пайплайна: агент не импровизирует, он исполняет правила. Правила лежат текстом в guide/ и читаются перед каждой сборкой.

Что описывать:

Ритм и монтаж. Длина шота, что вырезать (повторы дублей, фальш-старты, обрезанные хвосты слов, паузы), как ставить склейки.

Субтитры. Сколько слов на карточку, регистр, позиция, обводка, свечение, минимальная длительность.

Графика. Какие вставки бывают, когда какую доставать, сколько их на минуту, где им нельзя появляться.

Технические цели. Разрешение, fps, safe-зоны, уровни звука, что должно быть в финальном файле.

Антипаттерны. Список «так — нет, потому что». Самый полезный файл: он ловит то, что человек замечает глазом, а автомат — нет.

🔴 Главное правило про правила: числа должны быть в кадрах, а не в секундах. «0.5 секунды» при пересчёте накапливает ошибку, и к концу ролика субтитры уезжают. 24 fps → 0.5с = 12 кадров, так и писать.


Шаг 4. Компоненты графики

Здесь главная ошибка новичка, и она стоит недели.

Описание словами не работает. Если в правилах написано «карточка со скруглением 28px и подложкой из стекла», агент каждый раз пишет её заново, за пять минут, на ходу. Получается белый прямоугольник с текстом.

Нужен готовый код. Компоненты пишутся один раз и лежат в src/pack/. Агент их импортирует, а не изобретает.

Минимальный набор, который закрывает 90% роликов:

  • субтитры с обводкой и свечением;
  • карточка кода с шапкой, подсветкой, печатью по символам;
  • чипы — короткие подписи, всплывающие по ходу речи;
  • счётчик — цифры прокручиваются;
  • вставка-картинка — карточка над или под лицом;
  • финальная плашка с призывом.

🔴 Грабля. Шрифты грузятся асинхронно. Без явного ожидания первые кадры отрендерятся системным шрифтом — на видео это видно, и потом не чинится. Нужен delayRender до готовности всех шрифтов.

🔴 Грабля с кириллицей. Три русских слова не всегда влезают в строку даже на минимальном кегле: «ГЕНЕРИРУЕТ ИЗОБРАЖЕНИЯ БЕСПЛАТНО» — это 1555 пикселей при ширине кадра 1080. Значит кегль подбирается замером ширины, а карточка при необходимости режется. Иногда выходит одно слово на карточку, и это нормально.


Шаг 5. Звук

Три вещи, которые слышно сразу.

SFX кладутся в WAV, не в MP3. У MP3 плавающая тишина в начале файла, и звук на цифре приезжает с опозданием в пару кадров. Это заметно.

Тишину в начале обрезать в ноль, а все файлы категории нормализовать к одному пику. Тогда громкость выставляется одним коэффициентом и работает предсказуемо.

Ротация. Минимум 3-4 файла на категорию. Один и тот же «вжух» двенадцать раз за ролик читается как дефект.

Музыка — инструментал без вокала, ровная динамика без дропов, свободная середина. Голос живёт в 200 Гц — 4 кГц; если там мелодия, она дерётся с речью даже на тихом уровне. Помогает мягкий провал на 1.2 кГц и 2.6 кГц: музыка на слух почти не меняется, а голос читается.

Без дакинга. Всё просто тише голоса. Голос не в лимитер. Чисто и тихо лучше, чем громко и зажато.


Шаг 6. Инструкция для агента

Один файл в корне — PROMPT.md. В нём порядок работы:

  1. Найти исходник в input/, проверить fps и разрешение.
  2. Сделать транскрипт с таймингами слов, а не фраз.
  3. Разложить речь по смысловым блокам.
  4. Вырезать брак: повторы, фальш-старты, паузы.
  5. Собрать субтитры и графику.
  6. Отрендерить.
  7. Прогнать автопроверки. Нашёл дефект — починить и пересобрать.

🔴 Обязательно поставить потолок итераций. Без него агент будет шлифовать до упора и отдаст либо перешлифованное, либо ничего. Три круга, дальше — отдать как есть и перечислить нерешённое.

🔴 Транскрипт со словарём. Обычный Whisper на русской речи ломает английские названия: «мобин» превращается в «мобильн». Список названий передаётся в --initial_prompt, и распознавание становится точным. Самая дешёвая правка во всём пайплайне.


Шаг 7. Автопроверки

То, что отличает рабочий пайплайн от игрушки. Скрипт проверяет ролик перед сдачей и блокирует сборку при дефекте.

Что проверять:

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

🔴 Грабля. Проверка, которая молча проходит на пустых данных, хуже отсутствующей. У нас была проверка насыщенности, которая возвращала ноль кадров и давала зелёный. Каждая проверка должна падать, если ей нечего проверять.


Шаг 8. Запуск

Смонтируй ролик по PROMPT.md. Режим: оверлей. Стиль: premium.
В отчёте: элементов на кадре в среднем и максимуме, какой трек взял.

Всё. Одна строка.

🔴 Грабля. Поменял файлы правил — перезапусти сессию. Агент читает их на старте, и в середине работы будет утверждать, что компонента не существует, хотя он уже на диске.


Чему уделить время, а чему нет

Стоит: правилам и антипаттернам. Они дают 80% качества. Один файл «так — нет, потому что» полезнее десяти новых компонентов.

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

Считать надо элементы на кадре, а не вставки на минуту. Это разные вещи, и путаница между ними даёт скучный ролик при формально выполненном плане.


Порядок сборки, если начинать сегодня

  1. Установка и структура папок — час.
  2. Один компонент субтитров и тестовый рендер трёх секунд — проверить, что шрифты подхватились.
  3. Правила ритма и антипаттерны — самая полезная часть.
  4. Остальные компоненты по мере надобности.
  5. Автопроверки — когда появится, что проверять.
  6. Звуковая библиотека — в последнюю очередь, но без неё ролик звучит бедно.

Не пытаться собрать всё сразу. Первый рабочий ролик важнее полного набора возможностей.