Кейс · продукт
Автомонтаж контента: на входе голос, на выходе готовый ролик
Человек записывает голос. Дальше работает конвейер: расшифровка, сценарий по кадрам, картинка, субтитры, звук, обложка. Человек дважды говорит «да», на раскадровку и на контрольные кадры, и получает готовый ролик. Монтаж перестаёт быть вечером за таймлайном.
былостало
Главное
Было → сделал → стало
01 · было
Каждый ролик начинался с чистого таймлайна
Ролик собирался руками, и каждый следующий начинался с чистого таймлайна. Монтаж был вечером за таймлайном.
- Сборка ролика
- монтаж руками
- Что снимает человек
- себя и экран
02 · сделал
Собрал конвейер от голоса до готового файла
- Голос. Человек наговаривает текст и больше ничего не снимает: ролик идёт без лица.
- Тайминги из голоса. Запись расшифровывается по словам, тишина вырезается без ускорения речи. Ролик становится короче на 15–20%, а каждый кадр знает, на каком слове ему появиться.
- Раскадровка и первое «да». Сценарий режется на кадры: одна строка — один кадр. Схема всего ролика показывается человеку до вёрстки. Править на этом шаге дёшево.
- Картинка кодом. Каждый кадр — страница, движение идёт по одному общему таймлайну. Предметы для кадров генерируются бесплатно. Браузер снимает ролик по кадру.
- Контрольные кадры и второе «да». До полного рендера человек видит лист из двадцати с лишним кадров и говорит, так ли это выглядит.
- Звук, субтитры, обложка. Звуки ставятся по смыслу кадра. Текст субтитров берётся из сценария, а не из расшифровки. Обложка приходит в двух вариантах на выбор.
03 · стало
Монтаж стал прогоном
Ролик без лица собирается без платной генерации. Человек утверждает дважды: раскадровку и контрольные кадры. Ещё он выбирает обложку и принимает готовый ролик. Клипы по таймлайну он больше не двигает.
- Сборка ролика
- конвейер собирает, человек утверждает
- Что снимает человек
- только голос
Как это устроено
голос → тайминги по словам → вырезание тишины
сценарий по кадрам → раскадровка → «да» → кадры кодом → контрольный лист → «да» → рендер
ролик → звук по смыслу кадра → субтитры из сценария → обложка в двух вариантах → готовый файл
Оба «да» стоят до долгих шагов: первое перед вёрсткой, второе перед полным рендером. Ошибку ловят там, где она ещё ничего не стоит.
Что с чем соединялось
- HTML и GSAPКадр — это страница, движение — один таймлайн на весь ролик.
- ChromeСнимает ролик по кадру: что видно на странице, то и в видео.
- WhisperТайминги по словам. Текст субтитров при этом берётся из сценария.
- PythonСклейка шагов: резка тишины, раскладка звука, субтитры.
- ffmpegСборка кадров в видео и сведение звука.
- ClaudeРаскадровка, вёрстка кадров и проверка готового по кадрам.
Что было сложного
Четыре начитки подряд записались тишиной: микрофон молчал, а запись шла и завершалась без единой ошибки. Теперь уровень звука меряется после каждой записи, до того как с файлом начнёт работать конвейер.
Расшифровка меняет смысл. В одном ролике «подключил» превратилось в «отключил» — ровно наоборот. С тех пор расшифровка даёт только время слов, а сам текст субтитров берётся из сценария.
Рендер тормозил: браузер перезапускался на каждый кадр, и на кадр уходило до семи секунд, на пару роликов — часы. После переделки рендера 2295 кадров снимаются примерно за пять минут вместо часа.