用途
epub_to_audiobook 是一个将 EPUB 格式电子书转换为有声书的工具。它通过文本转语音(TTS)技术为电子书的每一章生成音频文件,输出结果针对 Audiobookshelf 进行了优化,方便用户在有声书管理平台中导入和收听。
主要能力
- 支持多种 TTS 提供商:Microsoft Azure 文本转语音 API、Edge TTS、OpenAI 文本转语音 API 以及 Piper TTS。
- 将 EPUB 文件中的每一章转换为独立的 MP3 文件,并提取章节标题作为元数据。
- 提供命令行界面和基于 Gradio 的 WebUI 图形界面。
- WebUI 功能包括:文件上传(拖拽)、TTS 提供商选择、语音配置(语言、声音、输出格式)、高级设置、实时日志、预览模式、搜索替换(用于修正发音或扩展缩写)。
- 支持通过环境变量配置 API 凭据。
- 提供 Docker 镜像和 docker-compose 配置,简化部署。
- 支持预览模式,可在转换前查看各章节的字符数统计。
- 支持搜索替换文件,每行包含一个正则搜索和替换,用 '==' 分隔。
使用方式
安装
- 克隆仓库:
git clone https://github.com/p0n1/epub_to_audiobook.git然后cd epub_to_audiobook。 - 创建并激活虚拟环境:
python3 -m venv venv然后source venv/bin/activate。 - 安装依赖:
pip install -r requirements.txt。注意:Python 3.14 需要仓库中更新的依赖集;旧版本固定了 gradio==5.33.1,可能导致 pydantic-core 源码构建失败并出现 PyO3 兼容性错误。 - 设置环境变量:
- Azure:
export MS_TTS_KEY=<your_subscription_key>和export MS_TTS_REGION=<your_region> - OpenAI:
export OPENAI_API_KEY=<your_openai_api_key> - 使用 Kokoro TTS 时,无需官方 OpenAI 密钥,但需要在环境变量中设置一个占位值(例如
export OPENAI_API_KEY='fake'),除非使用 docker compose 文件。
- Azure:
命令行使用
基本命令格式:python3 main.py "path/to/book.epub" "path/to/output/folder" --tts <provider>
示例:
- Azure 基本转换:
python3 main.py "path/to/book.epub" "path/to/output/folder" --tts azure - Azure 自定义语言和声音:
python3 main.py "path/to/book.epub" "path/to/output/folder" --tts azure --language zh-CN --voice_name "zh-CN-YunyeNeural" --log DEBUG - Azure 章节范围和段落间隔:
python3 main.py "path/to/book.epub" "path/to/output/folder" --tts azure --chapter_start 5 --chapter_end 10 --break_duration "1500" - OpenAI 基本转换:
python3 main.py "path/to/book.epub" "path/to/output/folder" --tts openai - OpenAI HD 模型和特定声音:
python3 main.py "path/to/book.epub" "path/to/output/folder" --tts openai --model_name "tts-1-hd" --voice_name "fable" - OpenAI 预览和文本输出:
python3 main.py "path/to/book.epub" "path/to/output/folder" --tts openai --preview --output_text
可以使用 --preview 选项在转换前获取每章的摘要(字符数统计)。
WebUI 使用
启动 WebUI:运行相应命令后,默认访问地址为 http://127.0.0.1:7860,可自定义主机和端口。
WebUI 操作步骤:
- 上传 EPUB 文件。
- 从选项卡中选择 TTS 提供商(OpenAI、Azure、Edge 或 Piper)。
- 配置提供商特定设置:
- OpenAI:选择模型、声音、速度和格式。
- Azure:选择语言、声音、格式和间隔时长。
- Edge:设置语言、声音、速率、音量和音调。
- Piper:配置本地或 Docker 部署及声音选项。
- 设置输出目录或使用默认的时间戳文件夹。
- 根据需要调整高级选项(章节范围、文本处理等)。
- 点击 Start 开始转换。
- 通过集成的日志查看器监控进度。
可以选取几章预览音频后再开始完整转换。
Docker 使用
可以使用提供的 docker-compose.webui.yml 文件运行 WebUI。确保编辑文件填入 TTS 提供商的 API 密钥。WebUI 可通过 http://localhost:7860 或 http://127.0.0.1:7860 访问。
也可以直接使用 Docker 镜像:从 GitHub Container Registry 拉取镜像,然后运行命令。例如 OpenAI:docker run ...(具体命令参考仓库)。-v ./:/app 选项将当前目录挂载到容器中的 /app 目录,以便读写文件。-i 和 -t 选项用于启用交互模式和分配伪终端。
适用场景
- 将个人收藏的 EPUB 电子书转换为有声书,便于在 Audiobookshelf 中管理和收听。
- 需要批量转换电子书章节并保留章节标题元数据的用户。
- 希望通过图形界面(WebUI)操作而非命令行的用户。
- 熟悉 Docker 并希望快速部署的用户。
- 需要自定义语音、语言、章节范围等参数的高级用户。
限制
- 需要 Python 3.10+ 或 Docker 环境。
- 使用 Azure TTS 需要 Microsoft Azure 账户和认知服务语音服务访问权限。
- 使用 OpenAI TTS 需要 OpenAI API Key(Kokoro TTS 除外,但需设置占位值)。
- 使用 Piper TTS 需要可执行文件和模型。
- 章节标题提取方法基于解析 HTML 中的 title 标签,对于格式复杂或不寻常的 EPUB 文件可能不完美,会使用章节文本前几个词作为回退标题。
- WebUI 是本地运行的 Web 应用,没有授权机制,不应暴露在公网,否则可能导致 TTS 提供商被未授权访问。
- Edge TTS 基于 Edge 朗读功能,无需 API Key,但参数受限(如自定义 SSML)。
- 使用 OpenAI 兼容服务(如 matatonic/openedai-speech)时需要设置相应配置。
- 具体价格和收费信息暂未提供。