РУКОВОДСТВО

Озвучка текста на 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 — бесплатной лицензией со списком запрещённых применений вместо запрета на коммерческое использование. Не используйте речь, чтобы выдавать себя за другого человека без его согласия, обманывать или травить, и указывайте, что аудио сгенерировано, там, где это важно.

Некоторые голоса каталога вдохновлены известными людьми. Это не их настоящие голоса, поэтому не выдавайте такое аудио за их реальные слова.