Нейроляпки: когда лень озвучивать книгу самому...
Автор: Евгений Задорожный…я поручаю это скрипту…
Аудиокниги — формат востребованный, но дорогой в производстве. Дикторы, студия, сведение — это долго и затратно. Современные LLM предлагают альтернативу: полностью автоматизированный конвейер, где нейросеть сначала выступает в роли режиссера, размечая текст, а затем — в роли актеров озвучки.
Озвучивать одним нейросетевым голосом — это скучно. Поэтому я решил добавить сложности. 
Режиссерский пульт: Промпт
Основа системы — запрос (промпт) к модели, которая должна превратить «простыню» текста в структурированный сценарий. Задача модели — не просто прочитать текст, а понять, кто именно говорит в данный момент, и расставить теги.
Чтобы модель понимала задачу, мы задаем жесткие рамки через системный промпт:
Ты профессиональный режиссер аудиокниг. Разметь текст по ролям.
ИНСТРУКЦИЯ:
Весь текст автора отдавай роли 'Narrator'. Для главного героя: 'Male_Hero'. Если повествование идёт от первого лица ГГ, то используй роль Narrator, а Male_Hero — только для его мыслей и реплик.
Прямую речь распредели по персонажам. ВЫБИРАЙ ТОЛЬКО ИЗ СПИСКА. Если нужной роли нет, выбери ближайшую по смыслу.
ВАЖНО: Если видишь в тексте разделители сцен (***, пустые строки с отбивкой), вставь отдельный элемент с ролью 'Silent_Break' и текстом «Пауза/Отбивка». Убери слова автора («сказал он»), если они лишние.
Список ролей и голосов:
«speakers»: {
«Narrator»: «Rasalgethi», «Narrator_Drama»: «Fenrir», «Narrator_Soft»: «Vindemiatrix»,
«Male_Hero»: «Orus», «Male_Deep»: «Puck», «Male_Calm»: «Umbriel», «Male_Villain»: «Algenib», «Male_Old»: «Gacrux», «Male_Casual»: «Zubenelgenubi»,
«Female_Hero»: «Zephyr», «Female_Strict»: «Kore», «Female_Soft»: «Achernar», «Female_Mature»: «Schedar», «Female_Mystic»: «Enceladus»,
«Child»: «Leda», «Robot»: «Iapetus», «Silent_Break»: «None»,
}
Кастинг голосов (Разметка)
После анализа текста скрипт получает структуру, где каждая реплика привязана к конкретному голосу. Для озвучки используется модель gemini-2.5-flash-preview-tts.
Вот как выглядит «разметка» сцены в опиумном притоне (Макао, 1888 год):
Narrator: Воздух в верхней галерее «Золотого Лотоса» был таким густым, что его хотелось сплюнуть. Пахло не дешёвой опиумной шелухой…
Narrator: Я стоял в тени тяжёлой парчовой портьеры…
Narrator: Моя цель — генерал Ли — сидел за низким столиком…
Далее происходит переключение на диалог с капитаном корабля:
Male_Old: Пятьдесят соверенов. И спишь на палубе с кули.
Male_Hero: Двадцать. И каюта.
Male_Old: Проваливай, белый дьявол. Мой корабль не возит нищих.
Голоса распределены в конфигурации следующим образом:
- Narrator → Rasalgethi
- Male_Hero → Orus
- Male_Old → Gacrux
Оценка времени и лимиты
Gemini TTS может в одном фрагменте использовать только два голоса. На это ещё накладываются ограничения на длительность созданного фрагмента: оптимально до полутора минут. Иначе начинают вылезать звуковые артефакты, свист. Поэтому каждый чанк — не более 1000-1500 символов, примерно 150-200 слов.
Генерация одной главы на 15 минут речи занимает примерно 7 минут. Но у модели есть ограничение на 100 запросов API в день. И поскольку на одну главу тратится 10-12 запросов, генерация для всего романа займет 3-4 дня.
Код здесь: https://pastes.io/multi-voice-audiobook-generator-with-gemini-tts
Пример озвучки скриптом:
Youtube: https://youtu.be/KVlE40Q0tNQ
-----
P. S. Для сравнения, попробовал и Elevenlabs: https://elevenlabs.io/app/studio/FnKnmnrI06wBWTBMtbFY — чуть чаще путает ударения, но позволяет более тонкие настройки. Качественное решение — не для ленивых 