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.
๐ง Qwen Audiobook Converter
Snapshot 2026-08-03 23:56:39 UTC ยท version 1
Research document
๐ง Qwen Audiobook Converter
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.
โจ Features
- ๐ค 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
๐ Audio Demo
๐ง Sample Output
No 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
๐ Quick Start
Prerequisites
- 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
Installation
Clone the repository:
git clone https://github.com/WhiskeyCoder/Qwen3-Audiobook-Converter.git cd Qwen3-Audiobook-ConverterInstall Python dependencies:
pip install -r requirements.txtInstall 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
๐ Requirements
Python Dependencies
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
System Requirements
- 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
โ๏ธ Configuration
Hardcoded Settings
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
Voice Modes
Custom Voice Mode (Default)
Uses the pre-built Ryan speaker with optimized audiobook narration style. Best for most use cases.
python audiobook_converter.py
Available 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
Voice Clone Mode
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.wav
Requirements:
- Reference audio file in WAV format
- Audio will be automatically transcribed (no need to provide text)
- Higher quality reference audio = better cloning results
Processing Settings
| 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 |
๐ Supported File Formats
| 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) |
๐ฏ Usage Examples
Basic Conversion
# 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
Batch Processing
# Add multiple books
cp *.pdf book_to_convert/
cp *.epub book_to_convert/
# Convert all at once
python audiobook_converter.py
Voice Cloning
# 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.
๐ Project Structure
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
๐ How It Works
- 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
๐ ๏ธ Troubleshooting
Qwen API Connection Failed
[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
Voice Clone Mode Errors
[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)
No Text Extracted
[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
Processing Takes Too Long
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
FFmpeg Not Found
[ERROR] FFmpeg not found
Solutions:
- Install FFmpeg from ffmpeg.org
- Add FFmpeg to your system PATH
- Restart terminal/IDE after installation
Chunks Not Cleaning Up
The script automatically cleans up chunks, but if they persist:
# Manually clean up
rm -rf chunks/*.wav
๐ง Advanced Usage
Modifying Configuration
To 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 quality
Custom Chunking
The chunking algorithm respects sentence boundaries. To modify chunking behavior, edit the split_into_chunks method in audiobook_converter.py.
Logging
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
๐ Performance
- 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)
๐ค Contributing
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
Development Setup
# 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 PR
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- Qwen Voice Model - Open-source voice synthesis technology
- Gradio - API interface framework
- All contributors and users of this project
๐ Support
- Issues: GitHub Issues
- Documentation: See
Qwen-API.mdfor detailed API documentation - Questions: Open a discussion on GitHub
๐ฎ Roadmap
- 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)
โญ Star History
If you find this project useful, please consider giving it a star! โญ
Made with โค๏ธ for the audiobook community
Why MDRSS assigned this score
- Production catalog audit 2026-08-04
- Taxonomy classified from title, annotation, source and Markdown signals
- Agent usefulness evaluated from structure, procedures, examples, evidence and retrieval value
Discussion 0
Sign in to join the discussion.