Озвучка текста на Python: офлайн, бесплатно и естественными голосами
В Python есть несколько способов превратить текст в речь. Одни библиотеки читают роботизированными голосами операционной системы, другие отправляют текст в онлайн-сервис, третьи запускают нейросеть прямо на вашем компьютере. Последние сегодня звучат почти как человек и при этом работают без интернета.
В этом руководстве мы сравним варианты, а затем покажем рабочий код для движка SuperClonica — pip-пакета на основе открытой модели Supertonic 3: установку, первый скрипт, свои голоса, длинные тексты и локальный HTTP API в Docker. Движок наш, поэтому мы прямо говорим, где речь о нашем продукте.
Способы озвучить текст на Python
Прежде чем выбирать библиотеку, решите две вещи: может ли текст покидать ваш компьютер и насколько естественно должен звучать голос.
- pyttsx3 управляет встроенным в систему синтезатором: SAPI5 в Windows, NSSpeechSynthesizer в macOS и eSpeak в Linux. Работает офлайн и ставится за секунды, но голоса звучат роботизированно и отличаются от машины к машине.
- gTTS отправляет текст в сервис озвучки Google Переводчика и сохраняет MP3. Звучит чище, но нужен интернет, вместо голосов есть только языки и акценты, а сам интерфейс неофициальный и может перестать работать.
- Облачные API Google, Amazon, Microsoft или ElevenLabs звучат очень хорошо, но требуют аккаунта и ключа, оплачиваются за каждый символ и отправляют каждый текст провайдеру.
- Локальные нейросети — Supertonic 3, Kokoro, Piper — работают на вашем процессоре или видеокарте. После однократной загрузки модели они работают офлайн, ничего не стоят за символ и звучат гораздо естественнее системных голосов. Подробно мы разбираем их на страницах сравнений.
Установка движка SuperClonica
Движок — один pip-пакет в двух сборках. Для любого процессора в Windows, macOS или Linux с Python 3.10 и новее: python -m pip install superclonica-cpu. Для видеокарты NVIDIA в Windows или Linux с Python 3.11 и новее: python -m pip install superclonica-gpu-cuda. Ставьте только один из них в окружение: оба дают один и тот же модуль superclonica.
GPU-сборка подтягивает CUDA и cuDNN через pip, поэтому от системы нужен только драйвер NVIDIA с поддержкой CUDA 12; без рабочей видеокарты движок переходит на процессор. При первом запуске модель Supertonic 3 (около 385 МБ) один раз скачивается в ~/.cache/supertonic3. Чтобы хранить её в другом месте, задайте SUPERTONIC_CACHE_DIR.
Первый скрипт
Импортируйте движок, озвучьте фразу и сохраните её: from superclonica import Superclonica, затем tts = Superclonica(), audio, sample_rate = tts.synthesize("Привет! Этот голос работает на моём компьютере.", voice="F1", lang="ru", seed=7) и tts.save("hello.wav", audio). С моделью идут десять голосов, от M1 до M5 и от F1 до F5, им не нужны дополнительные файлы.
Создавайте движок один раз и используйте повторно: загрузка занимает несколько секунд, а каждая следующая фраза — доли секунды. В наших замерах медианная короткая фраза заняла 0,12 с на RTX 5070 Ti и 0,43 с на Ryzen 7 5800X в четыре потока.
Свой голос
Голос Supertonic 3 — это JSON-файл размером около 0,3 МБ. Бесплатные голоса с примерами звучания лежат в репозитории superclonica/supertonic-voices на GitHub, а в каталоге SuperClonica их больше 170 — от персонажей игр до дикторов, у каждого есть бесплатное онлайн-демо.
Передайте файл вместо имени пресета: tts.synthesize("Доброе утро!", voice="ciri.json", lang="ru", seed=7). Из командной строки: superclonica --text "Доброе утро!" --voice ciri.json --lang ru --output morning.wav. Каждый голос говорит на всех 31 языках модели; в lang указывайте язык текста, например en, de, es или ja. Китайский не поддерживается.
Длинные тексты, диалоги и форматы файлов
Несколько параметров закрывают большинство реальных задач.
- Длинный текст, например главу, можно передать одним вызовом: движок делит его на естественные куски не длиннее 160 символов, и слова не повторяются и не проглатываются.
- normalize=True выравнивает громкость до −18 LUFS — это помогает, когда вы склеиваете много файлов.
- tts.synthesize_batch() озвучивает сразу несколько строк, каждую своим голосом, например реплики диалога; результаты идут в порядке входа.
- Тот же текст, голос и seed дают то же аудио, поэтому можно переозвучить одну строку, не трогая остальные.
- Числа читаются словами, популярные сокращения из переписки раскрываются, а эмодзи и незнакомые символы вычищаются, а не вызывают ошибку.
- tts.save() пишет WAV, FLAC или OGG — формат выбирается по расширению файла.
Озвучка как локальный HTTP API
Если программа, которой нужна речь, написана не на Python, запустите движок в Docker: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu или тег cuda с --gpus all на видеокарте NVIDIA. Модель скачивается в том при первом запуске.
Отправьте POST /synthesize с JSON, в котором текст, язык и содержимое файла голоса, — в ответ придёт WAV. Голос весит около 0,3 МБ, поэтому собирайте запрос в файле и отправляйте через curl -d @request.json.
Лицензии и ответственное использование
Supertonic 3 выпущена под OpenRAIL-M — бесплатной лицензией со списком запрещённых применений вместо запрета на коммерческое использование. Не используйте речь, чтобы выдавать себя за другого человека без его согласия, обманывать или травить, и указывайте, что аудио сгенерировано, там, где это важно.
Некоторые голоса каталога вдохновлены известными людьми. Это не их настоящие голоса, поэтому не выдавайте такое аудио за их реальные слова.