Convert PDFs, EPUBs, DOCX, DOC, and TXT files into high-quality audiobooks using Qwen3 TTS Voice Model - an open-source voice synthesis system that excels at natural speech generation and voice cloning.
- 🎤 Dual Voice Modes
- Custom Voice: Pre-built high-quality speakers (Ryan, Serena, Aiden, etc.) with optimized audiobook narration style
- Voice Clone: Clone any voice from a reference audio sample with automatic transcription
- 📚 Multi-Format Support: TXT, PDF, EPUB, DOCX, DOC
- 🤖 Always 1.7B Model: Uses the highest quality model for best results
- 🔄 Smart Chunking: Intelligent text splitting with sentence boundary detection
- 💾 Intelligent Caching: Avoids re-processing identical chunks
- 🔁 Robust Error Handling: Automatic retries and graceful failure recovery
- 📊 Progress Tracking: Real-time conversion progress with time estimates
- 🧹 Auto Cleanup: Automatic cleanup of temporary files, even on failure
🎧 Sample Output
Listen to the T-Rex: Download audioNo it's not broken, it's a raw mp3 file download it and play it, you can't embedded audio in a readme.md GitHub whenthe sample is on GitHub
- Qwen Voice Model running locally
- Download and run the Qwen3 TTS Gradio interface (One Click install with Pinokio)
- Server should be accessible at
http://127.0.0.1:7860
- Python 3.8+ with pip
- FFmpeg - Required for audio processing
-
Clone the repository:
git clone https://github.com/WhiskeyCoder/Qwen3-Audiobook-Converter.git cd Qwen3-Audiobook-Converter -
Install Python dependencies:
pip install -r requirements.txt
-
Install FFmpeg:
- Windows: Download from ffmpeg.org or
choco install ffmpeg - Linux:
sudo apt-get install ffmpeg - macOS:
brew install ffmpeg
- Windows: Download from ffmpeg.org or
-
Start Qwen Voice Model:
- Run your Qwen Gradio interface
- Verify it's accessible at
http://127.0.0.1:7860
-
Add your books:
# Place your books in the book_to_convert folder cp your_book.pdf book_to_convert/ -
Run the converter:
# Default: Custom Voice mode (Ryan speaker, English) python audiobook_converter.py # Voice Clone mode with automatic transcription python audiobook_converter.py --voice-clone --voice-sample path/to/reference.wav
gradio_client>=0.7.0
requests>=2.28.0
PyPDF2>=3.0.0
ebooklib>=0.18
pydub>=0.25.1
python-docx>=0.8.11
docx2txt>=0.8
beautifulsoup4>=4.11.0
- Python: 3.8 or higher
- FFmpeg: Required for audio processing (install separately)
- Qwen Voice Model: Running locally with Gradio API enabled
- RAM: 4GB+ recommended
- Storage: ~100MB per hour of audiobook
The converter uses optimized hardcoded settings for best audiobook quality:
- Speaker: Ryan (professional male narrator)
- Language: English
- Model Size: 1.7B (always - highest quality)
- Input Folder:
book_to_convert/ - Output Folder:
audiobooks/ - Style Instruction: Optimized for engaging, professional audiobook narration
Uses the pre-built Ryan speaker with optimized audiobook narration style. Best for most use cases.
python audiobook_converter.pyAvailable Speakers (can be changed in code):
Ryan- Male, clear and professional (default)Serena- Female, warm and friendlyAiden- Male, energeticDylan- Male, calmEric- Male, expressiveOno_anna- Female, Japanese accentSohee- Female, Korean accentUncle_fu- Male, Chinese accentVivian- Female, versatile
Clone a specific voice from a reference audio file. The reference audio is automatically transcribed using Qwen's Whisper model.
python audiobook_converter.py --voice-clone --voice-sample path/to/reference.wavRequirements:
- Reference audio file in WAV format
- Audio will be automatically transcribed (no need to provide text)
- Higher quality reference audio = better cloning results
| Setting | Value | Description |
|---|---|---|
CHUNK_SIZE_WORDS |
1200 | Words per processing chunk |
MAX_WORKERS |
1 | Concurrent chunks (keep at 1 to avoid rate limiting) |
AUDIO_FORMAT |
mp3 | Output format |
AUDIO_BITRATE |
128k | Audio quality |
MAX_RETRIES |
3 | Retry attempts for failed chunks |
| Format | Extension | Status |
|---|---|---|
| Plain Text | .txt |
✅ Full support |
.pdf |
✅ Full support | |
| EPUB | .epub |
✅ Full support |
| Word Document | .docx |
✅ Full support (requires python-docx) |
| Legacy Word | .doc |
✅ Full support (requires docx2txt) |
# Place your book in the input folder
cp "my_book.pdf" book_to_convert/
# Run the converter
python audiobook_converter.py
# Output will be in: audiobooks/my_book.mp3# Add multiple books
cp *.pdf book_to_convert/
cp *.epub book_to_convert/
# Convert all at once
python audiobook_converter.py# Clone a voice from reference audio
python audiobook_converter.py \
--voice-clone \
--voice-sample "reference_audio.wav"The reference audio will be automatically transcribed, so you don't need to provide the text manually.
qwen-audiobook-converter/
├── audiobook_converter.py # Main conversion script
├── requirements.txt # Python dependencies
├── README.md # This file
├── LICENSE # MIT License
├── .gitignore # Git ignore rules
├── book_to_convert/ # 📚 Input folder (place books here)
├── audiobooks/ # 🎧 Output folder (audiobooks saved here)
├── chunks/ # ⚡ Temporary processing files (auto-cleaned)
├── cache/ # 💾 Cached audio chunks
│ └── audio_chunks/
└── logs/ # 📊 Processing logs
└── audiobook_YYYYMMDD.log
- Text Extraction: Extracts text from various document formats (PDF, EPUB, DOCX, etc.)
- Intelligent Chunking: Splits text into optimal chunks (~1200 words) while respecting sentence boundaries
- Voice Generation: Sends chunks to Qwen API for voice synthesis using 1.7B model
- Progress Tracking: Monitors chunk processing with real-time progress updates
- Audio Assembly: Combines processed chunks into final audiobook
- Cleanup: Automatically removes temporary files, even on failure
[ERROR] Cannot connect to Qwen API!
Solutions:
- Ensure Qwen Gradio server is running
- Check if server is accessible:
curl http://127.0.0.1:7860/ - Verify firewall settings
- Check the
QWEN_API_URLin the code matches your server
[ERROR] Configuration Error! Voice Clone mode requires a reference audio file.
Solutions:
- Ensure
--voice-samplepoints to a valid WAV file - Verify the audio file exists and is readable
- Check file format (must be WAV)
[ERROR] No text extracted from document
Solutions:
- Verify file isn't corrupted
- Check if document contains selectable text (not just images)
- For image-based PDFs, use OCR first
- Try a different file format
Solutions:
- Each chunk takes ~4-5 minutes with 1.7B model (this is normal)
- Estimated time is shown:
~{chunks * 4} minutes - Processing is sequential to avoid rate limiting
- Large books will take time - be patient
[ERROR] FFmpeg not found
Solutions:
- Install FFmpeg from ffmpeg.org
- Add FFmpeg to your system PATH
- Restart terminal/IDE after installation
The script automatically cleans up chunks, but if they persist:
# Manually clean up
rm -rf chunks/*.wavTo change settings like speaker, language, or chunk size, edit the hardcoded configuration at the top of audiobook_converter.py:
# Hardcoded Voice Settings
CUSTOM_VOICE_SPEAKER = "Ryan" # Change to Serena, Aiden, etc.
CUSTOM_VOICE_LANGUAGE = "English"
CHUNK_SIZE_WORDS = 1200 # Adjust chunk size
AUDIO_BITRATE = "128k" # Change to 192k or 256k for higher qualityThe chunking algorithm respects sentence boundaries. To modify chunking behavior, edit the split_into_chunks method in audiobook_converter.py.
Logs are saved to logs/audiobook_YYYYMMDD.log with detailed information about:
- Text extraction progress
- Chunk processing status
- API calls and responses
- Errors and warnings
- Processing Speed: ~4-5 minutes per chunk (1.7B model)
- Quality: High-quality audio output suitable for audiobooks
- Memory Usage: ~2-4GB RAM during processing
- Storage: ~1MB per minute of audio (128kbps MP3)
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
# Clone your fork
git clone https://github.com/WhiskeyCoder/qwen-audiobook-converter.git
cd qwen-audiobook-converter
# Install dependencies
pip install -r requirements.txt
# Make your changes
# Test thoroughly
# Submit PRThis project is licensed under the MIT License - see the LICENSE file for details.
- Qwen Voice Model - Open-source voice synthesis technology
- Gradio - API interface framework
- All contributors and users of this project
- Issues: GitHub Issues
- Documentation: See
Qwen-API.mdfor detailed API documentation - Questions: Open a discussion on GitHub
- GUI interface for easier configuration
- Chapter detection and automatic splitting
- Multiple output formats (M4B, OGG, FLAC)
- Real-time preview functionality
- Voice quality enhancement options
- Batch voice model switching
- Progress persistence (resume interrupted conversions)
If you find this project useful, please consider giving it a star! ⭐
Made with ❤️ for the audiobook community