Все записи
4 мин

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

нейросетиразработкаАвтоматизация

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 этапов → борьба за качество. И знаете, когда такую штуку оркестрируешь через Claude Code, связкой ai агентов, а не пишешь руками строчку за строчкой, корневой баг прячется не в синтаксисе, а в стыках между шагами, и ловить его надо именно там. Конвейер работает, и теперь вопрос уже не «как сгенерировать ролик», а «как сделать так, чтобы его хотелось досмотреть».

Следующий пост: 20 аккаунтов, 0 просмотров