Обсудить задачу

DikLabКейсыПродукт

Кейс · продукт

Автомонтаж контента: на входе голос, на выходе готовый ролик

Человек записывает голос. Дальше работает конвейер: расшифровка, сценарий по кадрам, картинка, субтитры, звук, обложка. Человек дважды говорит «да», на раскадровку и на контрольные кадры, и получает готовый ролик. Монтаж перестаёт быть вечером за таймлайном.

  • Срок сборкитри недели
  • ОтрасльПродукт · свой продукт
  • СтекHTML и GSAP · Chrome · Whisper · Python · ffmpeg · Claude

былостало

конвейер собирает, человек утверждаетСборка ролика
Сборка роликамонтаж руками
только голосЧто снимает человек
Что снимает человексебя и экран

Главное

Было → сделал → стало

01 · было

Каждый ролик начинался с чистого таймлайна

Ролик собирался руками, и каждый следующий начинался с чистого таймлайна. Монтаж был вечером за таймлайном.

Сборка ролика
монтаж руками
Что снимает человек
себя и экран

02 · сделал

Собрал конвейер от голоса до готового файла

  1. Голос. Человек наговаривает текст и больше ничего не снимает: ролик идёт без лица.
  2. Тайминги из голоса. Запись расшифровывается по словам, тишина вырезается без ускорения речи. Ролик становится короче на 15–20%, а каждый кадр знает, на каком слове ему появиться.
  3. Раскадровка и первое «да». Сценарий режется на кадры: одна строка — один кадр. Схема всего ролика показывается человеку до вёрстки. Править на этом шаге дёшево.
  4. Картинка кодом. Каждый кадр — страница, движение идёт по одному общему таймлайну. Предметы для кадров генерируются бесплатно. Браузер снимает ролик по кадру.
  5. Контрольные кадры и второе «да». До полного рендера человек видит лист из двадцати с лишним кадров и говорит, так ли это выглядит.
  6. Звук, субтитры, обложка. Звуки ставятся по смыслу кадра. Текст субтитров берётся из сценария, а не из расшифровки. Обложка приходит в двух вариантах на выбор.

03 · стало

Монтаж стал прогоном

Ролик без лица собирается без платной генерации. Человек утверждает дважды: раскадровку и контрольные кадры. Ещё он выбирает обложку и принимает готовый ролик. Клипы по таймлайну он больше не двигает.

Сборка ролика
конвейер собирает, человек утверждает
Что снимает человек
только голос

Как это устроено

голос → тайминги по словам → вырезание тишины

сценарий по кадрам → раскадровка → «да» → кадры кодом → контрольный лист → «да» → рендер

ролик → звук по смыслу кадра → субтитры из сценария → обложка в двух вариантах → готовый файл

Оба «да» стоят до долгих шагов: первое перед вёрсткой, второе перед полным рендером. Ошибку ловят там, где она ещё ничего не стоит.

Что с чем соединялось

  • HTML и GSAPКадр — это страница, движение — один таймлайн на весь ролик.
  • ChromeСнимает ролик по кадру: что видно на странице, то и в видео.
  • WhisperТайминги по словам. Текст субтитров при этом берётся из сценария.
  • PythonСклейка шагов: резка тишины, раскладка звука, субтитры.
  • ffmpegСборка кадров в видео и сведение звука.
  • ClaudeРаскадровка, вёрстка кадров и проверка готового по кадрам.

Что было сложного

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

Расшифровка меняет смысл. В одном ролике «подключил» превратилось в «отключил» — ровно наоборот. С тех пор расшифровка даёт только время слов, а сам текст субтитров берётся из сценария.

Рендер тормозил: браузер перезапускался на каждый кадр, и на кадр уходило до семи секунд, на пару роликов — часы. После переделки рендера 2295 кадров снимаются примерно за пять минут вместо часа.

Кейсы рядом