Skip to content

Озвучка русских и иностранных текстов через платформу OpenAI

License

Notifications You must be signed in to change notification settings

Tim55667757/AudioGenerator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AudioGenerator

Озвучка русских и иностранных текстов через платформу OpenAI.

Скрипт пакетно озвучивает все текстовые файлы (.txt/.md) из каталога texts/ голосами OpenAI TTS и сохраняет результаты в audio/. Поддерживаются форматы вывода wav/mp3/flac/aac/opus/pcm.

Основа — модель gpt-4o-mini-tts. Стиль озвучки задаётся через «паспорт» диктора (passport), а список голосов — в voices.

Требования

  • Python 3.10+
  • Библиотека openai (официальный SDK)
  • Учётная запись OpenAI и API-ключ

Установка зависимостей:

pip install --upgrade openai

Быстрый старт

  1. Создайте структуру каталогов и поместите тексты:
project/
  TextToSpeech.py          # ваш скрипт
  texts/                   # сюда кладём .txt / .md
    01_euclid.txt
    02_archimedes.md
  audio/                   # создаётся автоматически
  1. Установите API-ключ (рекомендуется через переменную окружения):
  • macOS / Linux:

    export OPENAI_API_KEY="sk-...your_key..."
  • Windows PowerShell:

    $env:OPENAI_API_KEY="sk-...your_key..."
  1. Запустите:
python TextToSpeech.py

Готовые файлы окажутся в audio/ с именами вида:

audio/01_euclid_ballad.flac
audio/01_euclid_marin.flac

Настройка

Выбор голосов

В коде задайте массив:

voices = ["ballad", "marin"]  # можно: coral, verse, sage, alloy, echo, shimmer, ash

Примечание: marin на некоторых аккаунтах доступен только через Realtime API. Если получите ошибку «unsupported voice», исключите marin из списка или используйте другой голос.

Формат вывода

fileFormat = "flac"  # варианты: "wav", "mp3", "flac", "aac", "opus", "pcm"
  • Максимальная совместимость для «проиграть везде» — wav.
  • Для публикации/хранения — mp3 или flac.

«Паспорт» диктора (инструкции к интонации)

Правьте строку passport под нужный стиль. Рекомендации:

  • Чётко формулируйте темп, паузы и манеру (академичная, тёплая, нейтральная).
  • Для сложных фамилий ставьте ударения: Архиме́д, Пифаго́р, Пуа́нкаре́.
  • Для терминов используйте короткие паузы и разметку текстом (многоточия, перенос строки перед определением).

Параллелизм

CONCURRENCY = 5

Если ловите рейт-лимиты или 429 — уменьшите значение. Если всё стабильно — можно аккуратно увеличить.

Отбор файлов

Скрипт берёт все .txt и .md из texts/ (без вложенных папок), сортирует по имени. Кодировка входа — UTF-8.

Советы по качеству озвучки

  • Длинные тексты лучше разбивать на абзацы. В текущей версии скрипт читает файл целиком; если планируете длинные лекции, подумайте о разбиении на части и склейке с «тишиной» (например, 300–700 мс) между блоками.
  • Сложные имена и иностранные слова: заранее помечайте ударения и пишите «как читается» в скобках при первом употреблении.
  • Финальный звук: для публикаций можно слегка обработать файл (EQ, де-эссер, нормализация). Это делается уже вне скрипта отдельными скриптами, либо на монтаже.

Типовые ошибки и их причины

  • 401 Unauthorized: неверный или отсутствующий OPENAI_API_KEY.
  • 400 Bad Request / unsupported voice: выбранный voice не поддерживается вашей моделью/аккаунтом — замените голос.
  • 429 Rate Limit: уменьшите CONCURRENCY, добавьте повтор с задержкой.
  • «Белый шум» при проигрывании: как правило, связано со стримингом MP3 как PCM. Лучше сохранять в файлы — просто откройте итоговый wav/mp3/flac в нормальном плеере. Для стриминга в память используйте wav/pcm.

Правовой раздел (кратко)

  • Вы владеете выходным контентом (озвучкой), при условии соблюдения правил OpenAI и законов юрисдикции вашей страны.
  • Нельзя имитировать реальных людей без согласия; избегайте вводящего в заблуждение использования голоса.
  • Проверьте авторские права на исходные тексты, если это не ваши материалы.

FAQ

Как выбрать голос под материал?

  • Исторический нарратив, биографии — marin (жен) или ballad (муж).
  • Объяснения/доказательства — verse.
  • Промо/тизеры — coral.

Почему именно flac по умолчанию?

Сжимается без потерь (архив качества). Если нужна максимальная совместимость — поставьте wav или добавьте конверсию в mp3.

Можно ли читать не только .txt и .md? Да, расширьте фильтр в функции CollectInputFiles и добавьте парсинг нужных форматов (например, .rst).

Доработки (идеи)

  • Авторазбиение длинных файлов на части и склейка с точными паузами.
  • Словарь ударений для фамилий/терминов (автоподстановка а́кутов).
  • Маппинг голоса по префиксу файла: bio_* -> marin, theorem_* -> verse, promo_* -> coral.

Запуск из Docker (опционально)

Создайте простой Dockerfile на базе python:3.11-slim, установите openai, скопируйте проект и передайте OPENAI_API_KEY через --env/.env. Это удобно для CI/CD.

About

Озвучка русских и иностранных текстов через платформу OpenAI

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages