readme/README_hin.md
рдЕрдзреНрдпрд╛рдпреЛрдВ рдФрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдИ-рдмреБрдХ рд╕реЗ рдСрдбрд┐рдпреЛрдмреБрдХ рдореЗрдВ рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ CPU/GPU рдХрдиреНрд╡рд░реНрдЯрд░
рдЙрдиреНрдирдд TTS рдЗрдВрдЬрдиреЛрдВ рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред
рд╡реЙрдпрд╕ рдХреНрд▓реЛрдирд┐рдВрдЧ рдФрд░ 1158 рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ!
[!IMPORTANT] рдпрд╣ рдЯреВрд▓ рдХреЗрд╡рд▓ DRM-рдореБрдХреНрдд, рд╡реИрдз рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдИ-рдмреБрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣реИред
рд▓реЗрдЦрдХ рдЗрд╕ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рдХрд┐рд╕реА рднреА рджреБрд░реБрдкрдпреЛрдЧ рдпрд╛ рдЙрд╕рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рд╕реА рднреА рдХрд╛рдиреВрдиреА рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред
рдЗрд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рд╕реЗ рдФрд░ рд╕рднреА рд▓рд╛рдЧреВ рдХрд╛рдиреВрдиреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдореЗрдВ рдХрд░реЗрдВред
</a><a href="https://hub.docker.com/r/athomasson2/ebook2audiobook">
</a>рдирдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрд╡рд╛рдЬрд╝ рдХрд╛ рдбреЗрдореЛ
https://github.com/user-attachments/assets/750035dc-e355-46f1-9286-05c1d9e88cea
<details> <summary>рдФрд░ рдбреЗрдореЛ</summary>ASMR рдЖрд╡рд╛рдЬрд╝
https://github.com/user-attachments/assets/68eee9a1-6f71-4903-aacd-47397e47e422
рдмрд░рд╕рд╛рдд рдХреЗ рджрд┐рди рдХреА рдЖрд╡рд╛рдЬрд╝
https://github.com/user-attachments/assets/d25034d9-c77f-43a9-8f14-0d167172b080
рд╕реНрдХрд╛рд░рд▓реЗрдЯ рдЖрд╡рд╛рдЬрд╝
https://github.com/user-attachments/assets/b12009ee-ec0d-45ce-a1ef-b3a52b9f8693
рдбреЗрд╡рд┐рдб рдПрдЯрдирдмрд░реЛ рдЖрд╡рд╛рдЬрд╝
https://github.com/user-attachments/assets/81c4baad-117e-4db5-ac86-efc2b7fea921
рдЙрджрд╛рд╣рд░рдг
</details>рдлрд╝рд╛рдЗрди-рдЯреНрдпреВрди рдХрд┐рдП рдЧрдП TTS рдореЙрдбрд▓
рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛
ЁЯФз рд╕рдорд░реНрдерд┐рдд TTS рдЗрдВрдЬрди: XTTSv2, Bark, Fairseq, VITS, Tacotron2, Tortoise, GlowTTS, YourTTS
ЁЯУЪ рдЕрдиреЗрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ: .epub, .mobi, .azw3, .fb2, .lrf, .rb, .snb, .tcr, .pdf, .txt, .rtf, .doc, .docx, .html, .odt, .azw, .tiff, .tif, .png, .jpg, .jpeg, .bmp, .zip
ЁЯТ╗ рдЫреЛрдЯреЗ рдкрд╛рда рдХреЛ рд╕реАрдзреЗ рдСрдбрд┐рдпреЛ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рда рдХреНрд╖реЗрддреНрд░
ЁЯФН рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рда рдкреГрд╖реНрдареЛрдВ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП OCR рд╕реНрдХреИрдирд┐рдВрдЧ
ЁЯФК рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рд╕реНрдкреАрдЪ, рд▓рдЧрднрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕реЗ рд▓реЗрдХрд░ рд▓рдЧрднрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡рд╛рдЬрд╝ рддрдХ
ЁЯЧгя╕П рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдЖрд╡рд╛рдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡реЙрдпрд╕ рдХреНрд▓реЛрдирд┐рдВрдЧ
ЁЯМР 1158 рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (supported languages list)
ЁЯТ╗ рдХрдо рд╕рдВрд╕рд╛рдзрди рдЕрдиреБрдХреВрд▓ тАФ 2 GB RAM / 1 GB VRAM (рдиреНрдпреВрдирддрдо) рдкрд░ рдЪрд▓рддрд╛ рд╣реИ
ЁЯО╡ рдСрдбрд┐рдпреЛрдмреБрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рд░реВрдк: mono or stereo aac, flac, mp3, m4b, m4a, mp4, mov, ogg, wav, webm
ЁЯза SML рдЯреИрдЧ рд╕рдорд░реНрдерд┐рдд тАФ рд░реБрдХрд╛рд╡рдЯреЛрдВ, рд╡рд┐рд░рд╛рдореЛрдВ, рдЖрд╡рд╛рдЬрд╝ рдмрджрд▓рдиреЗ рдЖрджрд┐ рдкрд░ рд╕реВрдХреНрд╖реНрдо рдирд┐рдпрдВрддреНрд░рдг (see below)
ЁЯзй рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╕реНрдЯрдо рдореЙрдбрд▓ (XTTSv2, VITS, FAIRSEQ, PIPER, others on request)
ЁЯОЫя╕П E2A рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдлрд╝рд╛рдЗрди-рдЯреНрдпреВрди рдХрд┐рдП рдЧрдП рдкреНрд░реАрд╕реЗрдЯ рдореЙрдбрд▓
<i>(рдпрджрд┐ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрди-рдЯреНрдпреВрди рдХрд┐рдП рдЧрдП рдореЙрдбрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░реАрд╕реЗрдЯ рд╕реВрдЪреА рдореЗрдВ рдЕрдкрдиреЗ рдореЙрдбрд▓ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ)</i>
*<i> рдЖрдзреБрдирд┐рдХ TTS рдЗрдВрдЬрди CPU рдкрд░ рдмрд╣реБрдд рдзреАрдореЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП YourTTS, Tacotron2 рдЖрджрд┐ рдЬреИрд╕реЗ рдирд┐рдореНрди рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ TTS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред</i>
| Arabic (ar) | Chinese (zh) | English (en) | Spanish (es) |
|---|---|---|---|
| French (fr) | German (de) | Italian (it) | Portuguese (pt) |
| Polish (pl) | Turkish (tr) | Russian (ru) | Dutch (nl) |
| Czech (cs) | Japanese (ja) | Hindi (hi) | Bengali (bn) |
| Hungarian (hu) | Korean (ko) | Vietnamese (vi) | Swedish (sv) |
| Persian (fa) | Yoruba (yo) | Swahili (sw) | Indonesian (id) |
| Slovak (sk) | Croatian (hr) | Tamil (ta) | Danish (da) |
.epub, .pdf, .mobi, .txt, .html, .rtf, .chm, .lit,
.pdb, .fb2, .odt, .cbr, .cbz, .prc, .lrf, .pml,
.snb, .cbc, .rb, .tcr.epub рдпрд╛ .mobi.m4b, .m4a, .mp4, .webm, .mov, .mp3, .flac, .wav, .ogg, .aac[break] тАФ рдореМрди (рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реАрдорд╛ 0.3тАУ0.6 sec.)[pause] тАФ рдореМрди (рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реАрдорд╛ 1.0тАУ1.6 sec.)[pause:N] тАФ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд┐рд░рд╛рдо (N sec.)[voice:/path/to/voice/file]...[/voice] тАФ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдпрд╛ GUI/CLI рд╕реЗ рдЪреБрдиреА рдЧрдИ рдЖрд╡рд╛рдЬрд╝ рд╕реЗ рдЖрд╡рд╛рдЬрд╝ рдмрджрд▓реЗрдВрдЖрдкрдХреА рдИ-рдмреБрдХ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ SML рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣рдорд╛рд░реЗ рджреВрд╕рд░реЗ рд░реЗрдкреЛ рдХреЛ рджреЗрдЦреЗрдВ -> E2A-SML
[!IMPORTANT] **рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдпрд╛ рдмрдЧ рд╕рдорд╕реНрдпрд╛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЦреБрд▓реА рдФрд░ рдмрдВрдж рд╕рдорд╕реНрдпрд╛рдУрдВ рд╡рд╛рд▓реЗ рдЯреИрдм рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЦреЛрдЬреЗрдВ
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред**
[!NOTE] **EPUB рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдРрд╕реА рдХреЛрдИ рдорд╛рдирдХ рд╕рдВрд░рдЪрдирд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗ рдХрд┐ рдЕрдзреНрдпрд╛рдп, рдЕрдиреБрдЪреНрдЫреЗрдж, рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдЖрджрд┐ рдХреНрдпрд╛ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЙрд╕ рд╕рднреА рдкрд╛рда рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдЖрдк рдСрдбрд┐рдпреЛ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗред**
рд░реЗрдкреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ
git clone https://github.com/DrewThomasson/ebook2audiobook.git
cd ebook2audiobook
ebook2audiobook рдЗрдВрд╕реНрдЯреЙрд▓ / рдЪрд▓рд╛рдПрдВ:
Linux/MacOS
./ebook2audiobook.command
<i>MacOS рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рджреЗрдВ: рдЧреБрдо рдкреНрд░реЛрдЧреНрд░рд╛рдореЛрдВ рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП homebrew рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред</i>
Mac рд▓реЙрдиреНрдЪрд░
Mac Ebook2Audiobook Launcher.command рдкрд░ рдбрдмрд▓ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
Windows
ebook2audiobook.cmd
рдпрд╛
ebook2audiobook.cmd рдкрд░ рдбрдмрд▓ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
<i>Windows рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рджреЗрдВ: рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЧреБрдо рдкреНрд░реЛрдЧреНрд░рд╛рдореЛрдВ рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП scoop рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред</i>
рд╡реЗрдм рдРрдк рдЦреЛрд▓реЗрдВ: рд╡реЗрдм рдРрдк рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдФрд░ рдИ-рдмреБрдХреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рджрд┐рдП рдЧрдП URL рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред http://localhost:7860/
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП:
./ebook2audiobook.command --share (Linux/MacOS)
ebook2audiobook.cmd --share (Windows)
python app.py --share (all OS)
[!IMPORTANT] **рдпрджрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд░реЛрдХрдХрд░ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ Gradio GUI рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд░рд┐рдлрд╝реНрд░реЗрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рддрд╛рдХрд┐ рд╡реЗрдм рдкреЗрдЬ рдирдП рдХрдиреЗрдХреНрд╢рди рд╕реЙрдХреЗрдЯ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬреБрдбрд╝ рд╕рдХреЗред**
Linux/MacOS:
./ebook2audiobook.command --headless --ebook <path_to_ebook_file> --voice <path_to_voice_file> --language <language_code>
Windows
ebook2audiobook.cmd --headless --ebook <path_to_ebook_file> --voice <path_to_voice_file> --language <language_code>
[--ebook]: рдЖрдкрдХреА рдИ-рдмреБрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде
[--voice]: рд╡реЙрдпрд╕ рдХреНрд▓реЛрдирд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдкрде (рд╡реИрдХрд▓реНрдкрд┐рдХ)
[--language]: ISO-639-3 рдореЗрдВ рднрд╛рд╖рд╛ рдХреЛрдб (рдЕрд░реНрдерд╛рддреН: рдЗрддрд╛рд▓рд╡реА рдХреЗ рд▓рд┐рдП ita, рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдХреЗ рд▓рд┐рдП eng, рдЬрд░реНрдорди рдХреЗ рд▓рд┐рдП deu...)ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд╛рд╖рд╛ eng рд╣реИ рдФрд░ ./lib/lang.py рдореЗрдВ рд╕реЗрдЯ рдХреА рдЧрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП --language рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред
2 рдЕрдХреНрд╖рд░ рд╡рд╛рд▓реЗ ISO-639-1 рдХреЛрдб рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред
(рдпрд╣ рдПрдХ .zip рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛрдВред XTTSv2 рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг: config.json, model.pth, vocab.json рдФрд░ ref.wav)
Linux/MacOS
./ebook2audiobook.command --headless --ebook <ebook_file_path> --language <language> --custom_model <custom_model_path>
Windows
ebook2audiobook.cmd --headless --ebook <ebook_file_path> --language <language> --custom_model <custom_model_path>
<i>рдзреНрдпрд╛рди рджреЗрдВ: рдЖрдкрдХреЗ рдХрд╕реНрдЯрдо рдореЙрдбрд▓ рдХрд╛ ref.wav рд╣рдореЗрд╢рд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЪреБрдиреА рдЧрдИ рдЖрд╡рд╛рдЬрд╝ рд╣реЛрддреА рд╣реИ</i>
<custom_model_path>: model_name.zip рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде,
рдЬрд┐рд╕рдореЗрдВ (tts рдЗрдВрдЬрди рдХреЗ рдЕрдиреБрд╕рд╛рд░) рд╕рднреА рдЕрдирд┐рд╡рд╛рд░реНрдп рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
(рджреЗрдЦреЗрдВ ./lib/models.py)ред
./ebook2audiobook.command --help
ebook2audiobook.cmd --help
python app.py --help <a id="help-command-output"></a>
usage: app.py [-h] [--session SESSION] [--share] [--headless] [--ebook EBOOK] [--ebooks_dir EBOOKS_DIR]
[--language LANGUAGE] [--voice VOICE] [--voice_map VOICE_MAP] [--device {CPU,CUDA,MPS,ROCM,XPU,JETSON}]
[--tts_engine {XTTS,BARK,VITS,FAIRSEQ,TACOTRON,YOURTTS,xtts,bark,vits,fairseq,tacotron,yourtts}]
[--custom_model CUSTOM_MODEL] [--fine_tuned FINE_TUNED] [--output_format OUTPUT_FORMAT]
[--output_channel OUTPUT_CHANNEL] [--temperature TEMPERATURE] [--length_penalty LENGTH_PENALTY]
[--num_beams NUM_BEAMS] [--repetition_penalty REPETITION_PENALTY] [--top_k TOP_K] [--top_p TOP_P]
[--speed SPEED] [--enable_text_splitting] [--text_temp TEXT_TEMP] [--waveform_temp WAVEFORM_TEMP]
[--output_dir OUTPUT_DIR] [--version]
Convert eBooks to Audiobooks using a Text-to-Speech model. You can either launch the Gradio interface or run the script in headless mode for direct conversion.
options:
-h, --help show this help message and exit
--session SESSION Session to resume the conversion in case of interruption, crash,
or reuse of custom models and custom cloning voices.
**** The following option is for gradio/gui mode only:
--share (Optional) Enable a public shareable Gradio link.
**** The following options are for --headless mode only:
--headless Run the script in headless mode
--ebook EBOOK Path to the ebook file for conversion. Cannot be used when --ebooks_dir is present.
--ebooks_dir EBOOKS_DIR
Relative or absolute path of the directory containing the files to convert.
Cannot be used when --ebook is present.
--text TEXT Raw text for conversion. Cannot be used when --ebook or --ebooks_dir is present.
--language LANGUAGE Language of the e-book. Default language is set
in ./lib/lang.py sed as default if not present. All compatible language codes are in ./lib/lang.py
optional parameters:
--translate ISO3 (Optional) Translate ebook to a target language (ISO 639-3 code, e.g. eng, fra, deu) before TTS synthesis.
Uses argostranslate. The target language becomes the effective TTS language for the run.
A copy of the source ebook is made with the _<iso3> suffix so translated and non-translated
outputs stay isolated (independent process folder, audio chunks, and final file).
--voice VOICE (Optional) Path to the voice cloning file for TTS engine.
Uses the default voice if not present.
--voice_map VOICE_MAP
(Optional, --ebooks_dir only) Path to a JSON file mapping ebook path -> voice path.
Each entry overrides --voice for that specific ebook. Missing/null entries fall back to --voice.
Keys may be absolute paths or basenames. Example:
{"book1.epub": "/voices/eng/adult/female/alice.wav", "/abs/path/book2.epub": null}
--device {CPU,CUDA,MPS,ROCM,XPU,JETSON}
(Optional) Processor unit type for the conversion.
Default is set in ./lib/conf.py if not present. Fall back to CPU if CUDA or MPS is not available.
--tts_engine {XTTS,BARK,VITS,FAIRSEQ,TACOTRON,YOURTTS,xtts,bark,vits,fairseq,tacotron,yourtts}
(Optional) Preferred TTS engine (available are: ['XTTS', 'BARK', 'VITS', 'FAIRSEQ', 'TACOTRON', 'YOURTTS', 'xtts', 'bark', 'vits', 'fairseq', 'tacotron', 'yourtts'].
Default depends on the selected language. The tts engine should be compatible with the chosen language
--custom_model CUSTOM_MODEL
(Optional) Path to the custom model zip file cntaining mandatory model files.
Please refer to ./lib/models.py
--fine_tuned FINE_TUNED
(Optional) Fine tuned model path. Default is builtin model.
--output_format OUTPUT_FORMAT
(Optional) Output audio format. Default is m4b set in ./lib/conf.py
--output_channel OUTPUT_CHANNEL
(Optional) Output audio channel. Default is mono set in ./lib/conf.py
--temperature TEMPERATURE
(xtts only, optional) Temperature for the model.
Default to config.json model. Higher temperatures lead to more creative outputs.
--length_penalty LENGTH_PENALTY
(xtts only, optional) A length penalty applied to the autoregressive decoder.
Default to config.json model. Not applied to custom models.
--num_beams NUM_BEAMS
(xtts only, optional) Controls how many alternative sequences the model explores. Must be equal or greater than length penalty.
Default to config.json model.
--repetition_penalty REPETITION_PENALTY
(xtts only, optional) A penalty that prevents the autoregressive decoder from repeating itself.
Default to config.json model.
--top_k TOP_K (xtts only, optional) Top-k sampling.
Lower values mean more likely outputs and increased audio generation speed.
Default to config.json model.
--top_p TOP_P (xtts only, optional) Top-p sampling.
Lower values mean more likely outputs and increased audio generation speed. Default to config.json model.
--speed SPEED (xtts only, optional) Speed factor for the speech generation.
Default to config.json model.
--enable_text_splitting
(xtts only, optional) Enable TTS text splitting. This option is known to not be very efficient.
Default to config.json model.
--text_temp TEXT_TEMP
(bark only, optional) Text Temperature for the model.
Default to config.json model.
--waveform_temp WAVEFORM_TEMP
(bark only, optional) Waveform Temperature for the model.
Default to config.json model.
--output_dir OUTPUT_DIR
(Optional) Path to the output directory. Default is set in ./lib/conf.py
--version Show the version of the script and exit
Example usage:
Windows:
Gradio/GUI:
ebook2audiobook.cmd
Headless mode:
ebook2audiobook.cmd --headless --ebook '/path/to/file' --language eng
Linux/Mac:
Gradio/GUI:
./ebook2audiobook.command
Headless mode:
./ebook2audiobook.command --headless --ebook '/path/to/file' --language eng
SML tags available:
[break] тАФ silence (random range **0.3тАУ0.6 sec.**)
[pause] тАФ silence (random range **1.0тАУ1.6 sec.**)
[pause:N] тАФ fixed pause (**N sec.**)
[voice:/path/to/voice/file]...[/voice] тАФ switch voice from default or selected voice from GUI/CLI
рдзреНрдпрд╛рди рджреЗрдВ: gradio/gui рдореЛрдб рдореЗрдВ, рдЪрд▓ рд░рд╣реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдИ-рдмреБрдХ рдЕрдкрд▓реЛрдб рдШрдЯрдХ рдХреЗ [X] рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд╕реБрдЭрд╛рд╡: рдпрджрд┐ рдереЛрдбрд╝реЗ рдЕрдзрд┐рдХ рд╡рд┐рд░рд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рддреЛ 3 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП '[pause:3]' рдЬреЛрдбрд╝реЗрдВ рдЖрджрд┐ред
git clone https://github.com/DrewThomasson/ebook2audiobook.git
cd ebook2audiobook
Windows:
Docker:
ebook2audiobook.cmd --script_mode build_docker
Docker Compose:
ebook2audiobook.cmd --script_mode build_docker --docker_mode compose
Podman Compose:
ebook2audiobook.cmd --script_mode build_docker --docker_mode podman
Linux/Mac
Docker:
./ebook2audiobook.command --script_mode build_docker
Docker Compose
./ebook2audiobook.command --script_mode build_docker --docker_mode compose
Podman Compose:
./ebook2audiobook.command --script_mode build_docker --docker_mode podman
Docker run image:
Gradio/GUI:
CPU:
docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" --rm -it -p 7860:7860 athomasson2/ebook2audiobook:cpu
CUDA:
docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" --gpus all --rm -it -p 7860:7860 athomasson2/ebook2audiobook:cu[118/122/124/126 etc..]
ROCM:
docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" --device=/dev/kfd --device=/dev/dri --rm -it -p 7860:7860 athomasson2/ebook2audiobook:rocm[6.0/6.1/6.4 etc..]
XPU:
docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" --device=/dev/dri --rm -it -p 7860:7860 athomasson2/ebook2audiobook:xpu
JETSON:
docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" --runtime nvidia --rm -it -p 7860:7860 athomasson2/ebook2audiobook:jetson[51/60/61 etc...]
Headless mode:
CPU:
docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" -v "/my/real/ebooks/folder/absolute/path:/app/another_ebook_folder" --rm -it -p 7860:7860 ebook2audiobook:cpu --headless --ebook "/app/another_ebook_folder/myfile.pdf" [--voice /app/my/voicepath/voice.mp3 etc..]
CUDA:
docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" -v "/my/real/ebooks/folder/absolute/path:/app/another_ebook_folder" --gpus all --rm -it -p 7860:7860 ebook2audiobook:cu[118/122/124/126 etc..] --headless --ebook "/app/another_ebook_folder/myfile.pdf" [--voice /app/my/voicepath/voice.mp3 etc..]
ROCM:
docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" -v "/my/real/ebooks/folder/absolute/path:/app/another_ebook_folder" --device=/dev/kfd --device=/dev/dri --rm -it -p 7860:7860 ebook2audiobook:rocm[6.0/6.1/6.4 etc.] --headless --ebook "/app/another_ebook_folder/myfile.pdf" [--voice /app/my/voicepath/voice.mp3 etc..]
XPU:
docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" -v "/my/real/ebooks/folder/absolute/path:/app/another_ebook_folder" --device=/dev/dri --rm -it -p 7860:7860 ebook2audiobook:xpu --headless --ebook "/app/another_ebook_folder/myfile.pdf" [--voice /app/my/voicepath/voice.mp3 etc..]
JETSON:
docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" -v "/my/real/ebooks/folder/absolute/path:/app/another_ebook_folder" --runtime nvidia --rm -it -p 7860:7860 ebook2audiobook:jetson[51/60/61 etc.] --headless --ebook "/app/another_ebook_folder/myfile.pdf" [--voice /app/my/voicepath/voice.mp3 etc..]
Docker Compose (i.e. cuda 12.8:
Run Gradio GUI:
DEVICE_TAG=cu128 docker compose --profile gpu up --no-log-prefix
Run Headless mode:
DEVICE_TAG=cu128 docker compose --profile gpu run --rm ebook2audiobook --headless --ebook "/app/ebooks/myfile.pdf" --voice /app/voices/eng/adult/female/some_voice.wav etc..
Podman Compose (i.e. cuda 12.8:
Run Gradio GUI:
DEVICE_TAG=cu128 podman-compose -f podman-compose.yml --profile gpu up
Run Headless mode:
DEVICE_TAG=cu128 podman-compose -f podman-compose.yml --profile gpu run --rm ebook2audiobook-gpu --headless --ebook "/app/ebooks/myfile.pdf" --voice /app/voices/eng/adult/female/some_voice.wav etc..
рдХрд╕реНрдЯрдо XTTSv2 рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╛рдЬрд╝ рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рдСрдбрд┐рдпреЛ рдХреНрд▓рд┐рдк рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ:
рдЖрдк рдЕрдкрдиреА рдЗрдЪреНрдЫрд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП libs/conf.py рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмрд╕ рдореВрд▓ conf.py рдХреА рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд▓реЗрдВ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ ebook2audiobook рдЕрджреНрдпрддрди рдкрд░ рдЖрдк рдЕрдкрдиреЗ рд╕рдВрд╢реЛрдзрд┐рдд conf.py рдХрд╛ рдмреИрдХрдЕрдк рд▓реЗ рд╕рдХреЗрдВ рдФрд░ рдореВрд▓ рдХреЛ рд╡рд╛рдкрд╕ рд░рдЦ рд╕рдХреЗрдВред рдЖрдкрдХреЛ models.py рдХреЗ рд▓рд┐рдП рднреА рд╡рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреА рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╕реНрдЯрдо рдореЙрдбрд▓ рдХреЛ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдлрд╝рд╛рдЗрди-рдЯреНрдпреВрди рдХрд┐рдпрд╛ рдЧрдпрд╛ ebook2audiobook рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдорд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рдкреНрд░реАрд╕реЗрдЯ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред
рд░рд┐рд▓реАрдЬрд╝ рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ -> рдпрд╣рд╛рдВ
git checkout tags/VERSION_NUM # Locally/Compose -> Example: git checkout tags/v25.7.7
--help рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВредрдЙрджрд╛рд╣рд░рдг:
import json
from typing import Optional
def get_user(user_id:int, users:list[dict])->Optional[dict]:
for user in users:
if user['id'] == user_id:
return user
return None
def summarize(user:dict)->str:
return f"User {user['name']} is {'active' if user['is_active'] else 'inactive'}."
def to_json(user:dict)->str:
return json.dumps({"id": user['id'], "name": user['name'], "email": user['email']})
users:list = [
dict(id=1, name="alice", email="[email protected]", role="admin", is_active=True),
dict(id=2, name="bob", email="[email protected]", role="editor", is_active=False),
dict(id=3, name="carol", email="[email protected]", role="viewer", is_active=True),
]
config = {
"max_users": 100,
"default_role": "viewer",
"allow_signup": True,
}
roles = ['admin', 'editor', 'viewer']
found = get_user(1, users)
if found:
print(summarize(found))
print(found['email'])
print(to_json(found))
if config['default_role'] in roles:
print(config['default_role'])
рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:
@DrewThomasson рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ! ЁЯШГ
<!-- ## рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП GPU рдХрд┐рд░рд╛рдП рдкрд░ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? - рдпрд╣рд╛рдВ рдПрдХ рдорддрджрд╛рди рдЦреБрд▓рд╛ рд╣реИ https://github.com/DrewThomasson/ebook2audiobook/discussions/889 -->