Обвязка озвучки: снятие маркеров разметки для TTS и проверка целостности синтеза

This commit is contained in:
Илья Поляков
2026-08-03 10:48:04 +03:00
parent b92a0a39c0
commit 93c40c76bf
4 changed files with 373 additions and 1 deletions
+35
View File
@@ -172,6 +172,41 @@ rm -rf out/tr/progress out/tr/context out/tr/translations
cd scripts && python3 test_translate.py
```
## Озвучка (опционально)
Синтез тоже делает `book_translator` (`05_create_audiobook.py`, движок
edge-tts от Microsoft — бесплатный, нужен интернет). В `scripts/audiobook.py`
две обвязки; чужой репозиторий по-прежнему не трогаем.
```bash
pip install edge-tts pydub # ffmpeg нужен отдельно, из пакетов системы
# 1. снять маркеры разметки — иначе TTS проговорит ⟦i⟧
python3 scripts/audiobook.py prep out/tr/translations out/tr/translations_tts
# 2. синтез (в фоне; на 12 часов звучания уходит 1.5–3 часа)
cd out/tr && python3 ~/Projects/book_translator/05_create_audiobook.py \
--translations-dir translations_tts --voice dmitry --rate '+0%'
# 3. проверка ДО того, как скрипт уберёт temp_audio/
python3 scripts/audiobook.py verify out/tr/translations_tts out/tr/audiobook
```
`verify` находит главы с недостающими фрагментами, битые и нулевые mp3 и главы,
которые короче расчётной длительности. Норму «секунд на знак» он берёт как
медиану по всем главам, поэтому не зависит от выбранного голоса и скорости.
Код возврата ненулевой, если что-то не так.
Повторный запуск синтеза добирает пропущенное: сторонний скрипт пропускает
фрагмент, если файл существует **и непустой**. Битые файлы, названные `verify`,
надо удалить руками — их он проверять не станет.
Ограничения чужой стадии: на выходе один слитный `audiobook_complete.mp3` без
разбивки по главам и без меток — для плеера неудобно, разбивка здесь не
реализована. Для технической книги стоит сначала прогнать фонетику
(`07_extract_terms.py` + `08_generate_phonetics.py`), иначе русский голос
исковеркает все английские термины.
## Проверка результата
```bash