Add audiobook support with TTS bridge and Audiobookshelf sync - #3102
Add audiobook support with TTS bridge and Audiobookshelf sync#3102collaed wants to merge 1 commit into
Conversation
New features bridging ebooks and audiobooks: 1. Audio format recognition (M4B, MP3, M4A, FLAC, OGG, OPUS) - Added to BOOK_EXTENSIONS for library import - New AUDIOBOOK_EXTENSIONS constant - AudioBookMetadataReader plugin reads tags via ffprobe 2. Audio metadata extraction (src/calibre/ebooks/metadata/audio/) - Reads title, author, narrator, series, chapters, cover art - Extracts duration, codec, bitrate, sample rate - Supports all common audiobook tag conventions 3. Audio player widget (src/calibre/gui2/audiobook/) - Qt QMediaPlayer-based playback with transport controls - Chapter navigation (prev/next, click-to-seek) - Speed control (0.5x to 3.0x) - Volume control and position slider - Position tracking for resume 4. Ebook-to-audiobook TTS conversion (tts_bridge.py) - Uses Calibre's built-in Piper neural TTS engine - Extracts text from any ebook format via conversion pipeline - Splits into chapters, generates MP3 per chapter - Adds resulting MP3 as new format on the book 5. Audiobookshelf API client (abs_client.py) - Full REST client for ABS server communication - Library browsing, item search, metadata fetch - Playback session management with progress sync - Cover art and audio file download - Bidirectional metadata conversion (ABS <-> Calibre) 6. Audiobookshelf sync dialog (abs_sync_dialog.py) - Connect to ABS server with URL + API token - Browse and import audiobooks (metadata, covers, audio files) - Sync listening/reading progress bidirectionally - Match books by ISBN, ASIN, or audiobookshelf identifier 7. Audiobook toolbar action (gui2/actions/audiobook.py) - Play audiobook format directly from library - Convert ebook to audiobook via TTS (background thread) - Open Audiobookshelf sync dialog Inspired by features from the audiobookshelf project.
|
Before I look at actual code.
|
|
点击朗读 就闪退为什么 |
Summary
Adds first-class audiobook support to Calibre, bridging the ebook and audiobook worlds with TTS conversion and Audiobookshelf server integration.
What this PR adds
1. Audio format recognition
BOOK_EXTENSIONSAUDIOBOOK_EXTENSIONSconstant insrc/calibre/ebooks/__init__.pyAudioBookMetadataReaderplugin registered in builtins — reads metadata via ffprobe2. Audio metadata extraction (
src/calibre/ebooks/metadata/audio/)3. Audio player widget (
src/calibre/gui2/audiobook/)QMediaPlayer+QAudioOutput4. Ebook → Audiobook TTS conversion (
tts_bridge.py)calibre_extensions.ffmpeg5. Audiobookshelf API client (
abs_client.py)abs_item_to_calibre_metadata()— ABS item → CalibreMetadatacalibre_metadata_to_abs_match()— CalibreMetadata→ ABS search params6. Audiobookshelf sync dialog (
abs_sync_dialog.py)audiobookshelfidentifier7. Toolbar action (
gui2/actions/audiobook.py)Architecture decisions
MetadataReaderPluginandInterfaceActionBasepatterns exactly.Metadataobject, compatible with custom columns andbooks_plugin_data.Files changed
src/calibre/ebooks/__init__.pyBOOK_EXTENSIONS, newAUDIOBOOK_EXTENSIONSsrc/calibre/customize/builtins.pyAudioBookMetadataReaderandActionAudiobooksrc/calibre/ebooks/metadata/audio/__init__.pysrc/calibre/gui2/audiobook/__init__.pysrc/calibre/gui2/audiobook/tts_bridge.pysrc/calibre/gui2/audiobook/abs_client.pysrc/calibre/gui2/audiobook/abs_sync_dialog.pysrc/calibre/gui2/actions/audiobook.pyWhat was tested
py_compilesyntax validation