epub -> audio

Mým cílem je vytvořit jednoduchý nástroj, který by uměl načítat epub soubory a převádět je na audio formát, který by šel přehrát.

spd-say

Vestavěné řešení pro TTS na Ubuntu je nástroj spd-say, který je součástí balíčku speech-dispatcher. Tento nástroj umožňuje převést text na řeč přímo z příkazového řádku.

spd-say "Ahoj, toto je testovací zpráva."

Kvalita je asi taková jako kdyby na vás hovořil Stephen Hawking.

piper

Ilustrace nástroje Piper

pip install piper-tts

Pokud chcete instalční soubor stáhnout jako binárku: piper_amd64-v1.2.0.tar.gz

Musíme ještě stáhnout nějaký hlas:

python3 -m piper.download_voices | grep cs
cs_CZ-jirka-low
cs_CZ-jirka-medium
python3 -m piper.download_voices cs_CZ-jirka-medium

Některé přepínače pro piper:

  • --cuda - povolí akceleraci na GPU (vyžaduje balíček onnxruntime-gpu)
  • --input-file - načte vstupní text z jednoho nebo více souborů
  • --sentence-silence - přidá sekundy ticha ke všem větám kromě poslední
  • --volume - upraví hlasitost (výchozí: 1.0)
  • --no-normalize - zakáže automatickou normalizaci hlasitosti

Pokud máte nainstálovaný balíček ffmpeg, můžete výstupní data rovnou přehrát:

python3 -m piper -m cs_CZ-jirka-medium -- "Tohle je zkouška"

Pokud ne, tak se vytvoří soubor ve formátu wav, který si můžete přehrát například pomocí vlc:

vlc output.wav

Nebo pomocí:

aplay output.wav

Výhoda piperu je že běží poměrně rychle i na procesoru. Modely jsou malé a ideální pro provozování na edge zařízeních. Nevýhodou je, že zatím není k dispozici moc českých hlasů. V základu je jen jeden “Jirka” a dá se sehnat “Honza” z huggingface.

Nevýhoda je kvalita hlasu, která je sice lepší než u spd-say, ale stále je to strojový hlas.

Nedostatek ruzných hlasů je možné řešit pomocí sox, který umožňuje upravit výšku a rychlost hlasu. Například:

sox output.wav output2.wav speed 1.2 pitch 200

Což umožní upravit způsob reprezentace postav vypravečem, ale plně nenahradí další hlasy.

edge-tts

Python knihovna edge-tts je nástroj, který umožňuje využívat TTS technologii od Microsoftu. Tento nástroj poskytuje přístup k různým hlasům a jazykům, včetně češtiny. Převod textu na řeč je rychlý a kvalita hlasu je velmi dobrá. Vše funguje online na serverech Microsoftu, takže je potřeba být připojen k internetu.

edge-tts --list-voices | grep -i "cs-CZ"
cs-CZ-AntoninNeural                Male      General                Friendly, Positive
cs-CZ-VlastaNeural                 Female    General                Friendly, Positive

Kvalita je výrazně lepší než u piperu, ale k dispozici jsou jen dva české hlasy.

Trik jak přidat více hlasů v českém prostředí může být použití slovenských hlasů, které češtinu zvládají bez problému a mají jen “slovenský” přízvuk.

edge-tts --list-voices | grep -i "sk-SK"
sk-SK-LukasNeural                  Male      General                Friendly, Positive
sk-SK-ViktoriaNeural               Female    General                Friendly, Positive

Můj pokus o převod epub na audio

Github book_to_audio

EPUB -> TXT -> XML -> TXT fragmenty -> WAV fragmenty -> Spojená Audiokniha

Make file se stará o plnění cílů.

Nejprve se extrahuje text z EPUB do TXT, následně se převede do XML, kde se analyzuje text a rozdělí na jednotlivé dialogy. Dialogy se pak převedou do adresářové struktury, ze které je již možné generovat audio fragmenty v podobě WAV souborů a nakonec se spojí do finální audioknihy.

Implementoval jsem řešení pomocí piper a edge-tts. Otestoval jsem tak oba tyto nástroje, abych mohl porovnat kvalitu a rychlost převodu.

Edge tts je výrazně rychlejší a umožnujě paralelně poslat velké množství požadavků na server Microsoftu, takže můžete převést celou knihu během několika minut. Nevýhodou je, že je potřeba být připojen k internetu a je otázka času, kdy vás Microsoft zablokuje, pokud budete posílat velké množství požadavků.

Piper je výrazně náročnější na Váš HW, ale neste závislí na připojení k internetu. Hlasy mají výrazně horší kvalitu, ale je možné dotrénovat si vlastní model, pokud máte dostatek nahrávek, a výpočetního výkonu.

Podobná cizí řešení

Ebook-speaker

Repozitář z roku 2020. Autor bohužel mezitím umřel.

Využívá nástroje jako:

tesseract-ocr
espeak

QuickPiperAudiobook

Open source nástroj, který umí převést epub (a další formáty) na audio formát. Nástroj je napsaný v Pythonu a využívá knihovnu Piper pro TTS. Omezení pro češtinu stojí na tom, že musíte sehnat český hlas pro Piper, v základu mají jen jeden “Jirku” a ten trochu ráčkuje.

Lidské Jednání

Tento projekt zpracovává český překlad knihy “Human Action” (Lidské Jednání) z formátu PDF do optimalizovaných zvukových souborů prostřednictvím série kroků zpracování. Kódová základna obsahuje několik modulů, které zpracovávají různé aspekty zpracovatelského řetězce.

Výsledek autor nahrál na youtube.

ElevenLabs

V nástroji ElevenLabs si člověk může vybrat z mnoha hlasů až v 70 jazycích. ElevenLabs studio podporuje i tvorbu audioknih.

Subformer

Zajímavý bezplatný nástroj využívající hlas “Jirka” a patrně i Piper, ale běží v prohlížeči přímo na straně vašeho počítače. Před spuštěním si stáhne hlasový model a pak namluví uvedený text.