Все записи
Build Log3 мин

7 секунд чёрного экрана убивали каждый ролик. Вот как я починил

AIPythonАвтоматизация

MAKO, мой конвейер для автогенерации коротких видео, уже работал. Три этапа системы пройдены. Ролик генерируется, публикуется. Всё здорово. Пока я не начал смотреть результат.

Каждый ролик заканчивался 5-12 секундами чёрного экрана с тишиной. При целевой длине 15-20 секунд это треть хронометража. Публиковать такое нельзя.

Вечер: «текст крутой, но всё остальное — дерьмо»

26 марта, 20:49. Сгенерировал ролик по референсу. Текст нормальный. А дальше: «текст крутой, но динамики ни в голосе нет, ни в кадрах». Голос читает как диктор на вокзале. Картинка статичная.

21:01, следующая попытка. «Секунд 10-12 чёрный хвост. Текст без интонаций.» Ролик на 15 секунд, из которых последние 10 — чёрный экран и тишина. Это уже не мелочь.

Первая мысль: может ElevenLabs так плохо генерирует? Может аудио приходит с мусором на конце? Начал копать.

Диагноз: storyboard не знает сколько длится аудио

21:36. Попросил Claude Code пофиксить чёрный экран. Не помогло. «Всё то же самое, 6 секунд чёрный хвост.»

Проблема оказалась архитектурной: storyboard нарезал видеоклипы на фиксированное время, не зная сколько реально длится аудио. Звук заканчивался на 13-й секунде, а видео было нарезано на 20 секунд. Оставшиеся 7 секунд — чёрный экран.

Storyboard должен знать длительность аудио и покрывать ровно это время. Не больше, не меньше.

Утро: SSML, подписка и голос блогера

27 марта, 07:35. TTS без разметки читает текст монотонно. Без пауз, без акцентов, без ритма. Решение: SSML-теги. `` для пауз, `` для акцентов.

09:25. Купил подписку ElevenLabs. Лимиты на бесплатном тарифе кончались, подписка открывала клонирование голоса.

09:47. Новое видео. «Хук чувствуется, боль, CTA — отлично.» Контент работает. Но: «Опять чёрный хвост.» Тот же баг. Первый фикс не зацепил корень проблемы.

Два фикса подряд. И наконец заработало

10:35. Переписана обработка пауз через SSML. Голос стал звучать лучше: паузы между предложениями, акценты на ключевых словах. «Голос звучит намного лучше.» Разница заметна сразу.

11:28. Второй заход на чёрный хвост. Переделана синхронизация: теперь конвейер сначала генерирует аудио, замеряет длительность, и только потом storyboard нарезает видеоклипы ровно под это время. Никаких «примерно 20 секунд». Точное время.

Результат: «вот это уже заебись, любой длины аудио/видео — всё будет хорошо.»

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

Субтитры и музыка за 45 минут

11:30. Субтитры встроены. Текст из сценария накладывается поверх видео, синхронизированный с аудио.

12:06. Фоновая музыка. Тихий трек под голос, громкость подобрана чтобы не забивать речь.

12:16. «Нормуль, к чему переходим дальше?» Этап закрыт.

Почему это вообще случилось

В монолитном скрипте проблема была бы очевидна: время аудио передаётся переменной, всё в одном месте. В модульном конвейере каждый шаг автономен. Данные между ними нужно передавать явно. Пропустил один параметр — получил 7 секунд чёрного экрана на каждом ролике.

TTS без SSML-разметки — чтение по бумажке. С разметкой — ближе к живой речи. Не идеал, но разница между «невозможно слушать» и «нормально».

Итог за 16 часов

  • С вечера 26 марта до обеда 27-го:
  • Чёрный хвост пофикшен через синхронизацию аудио и видео по реальной длительности
  • Интонация улучшена через SSML-теги
  • Куплена подписка ElevenLabs, открыто клонирование голоса
  • Субтитры встроены в конвейер
  • Фоновая музыка добавлена

Арка MAKO: прототип за 2 днясистема из 3 этапов → борьба за качество. Конвейер работает. Теперь вопрос не «как сгенерировать ролик», а «как сделать так чтобы его хотелось досмотреть».