abogen:基于 Kokoro-82M 的文本转语音工具项目

Generate audiobooks from EPUBs, PDFs and text with synchronized captions.

分支5Tags27
文件最后提交记录最后更新时间
9 小时前
28 分钟前
4 个月前
8 个月前
23 小时前
6 个月前
4 个月前
6 个月前
4 个月前
1 年前
4 个月前
4 个月前
5 个月前
6 个月前
6 个月前
4 个月前

abogen

构建状态 GitHub 发布 Abogen PyPi Python 版本 操作系统 PyPi 总下载量 代码风格:black 许可证:MIT

denizsafak%2Fabogen | Trendshift

abogen 是一款功能强大的文本转语音转换工具,能让您轻松在几秒钟内将 ePub、PDF、文本、markdown 或字幕文件转换为高质量音频,并生成匹配的字幕。无论是制作有声书,还是为 Instagram、YouTube、TikTok 等平台的内容添加旁白,或是任何需要自然语音的项目,abogen 都能胜任。它采用 Kokoro-82M 模型实现文本转语音。

演示

https://github.com/user-attachments/assets/094ba3df-7d66-494a-bc31-0e4b41d0b865

本演示仅用 5 秒生成,产出约 1 分钟的音频,配有完美同步的字幕。如需制作类似视频,请参阅 演示指南

如何安装? Abogen Compatible PyPi Python Versions

Windows

前往 espeak-ng 最新发布页面 下载并运行 *.msi 文件。

选项 1:使用脚本安装

  1. 下载 仓库
  2. 解压 ZIP 文件
  3. 双击运行 WINDOWS_INSTALL.bat

此方法会自动处理所有事宜 - 在独立环境中安装包括 CUDA 在内的所有依赖项,无需单独安装 Python。(但仍需安装 espeak-ng。)

Note

您无需单独安装 Python。脚本会自动安装 Python。

选项 2:使用 uv 安装

首先,如果您尚未安装 uv,请安装 uv

# For NVIDIA GPUs (CUDA 12.8) - Recommended
uv tool install --python 3.12 abogen[cuda] --extra-index-url https://download.pytorch.org/whl/cu128 --index-strategy unsafe-best-match

# For NVIDIA GPUs (CUDA 12.6) - Older drivers
uv tool install --python 3.12 abogen[cuda126] --extra-index-url https://download.pytorch.org/whl/cu126 --index-strategy unsafe-best-match

# For NVIDIA GPUs (CUDA 13.0) - Newer drivers
uv tool install --python 3.12 abogen[cuda130] --extra-index-url https://download.pytorch.org/whl/cu130 --index-strategy unsafe-best-match

# For AMD GPUs or without GPU - If you have AMD GPU, you need to use Linux for GPU acceleration, because ROCm is not available on Windows.
uv tool install --python 3.12 abogen
备选方案:使用 pip 安装(点击展开)
# Create a virtual environment (optional)
mkdir abogen && cd abogen
python -m venv venv
venv\Scripts\activate

# For NVIDIA GPUs:
# We need to use an older version of PyTorch (2.8.0) until this issue is fixed: https://github.com/pytorch/pytorch/issues/166628
pip install torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0 --index-url https://download.pytorch.org/whl/cu128

# For AMD GPUs:
# Not supported yet, because ROCm is not available on Windows. Use Linux if you have AMD GPU.

# Install abogen
pip install abogen

Mac

首先,如果你尚未安装,请安装 uv

# Install espeak-ng
brew install espeak-ng

# For Silicon Mac (M1, M2 etc.)
uv tool install --python 3.13 abogen --with "kokoro @ git+https://github.com/hexgrad/kokoro.git,numpy<2"

# For Intel Mac
uv tool install --python 3.12 abogen --with "kokoro @ git+https://github.com/hexgrad/kokoro.git,numpy<2"
替代方案:使用 pip 安装(点击展开)
# Install espeak-ng
brew install espeak-ng

# Create a virtual environment (recommended)
mkdir abogen && cd abogen
python3 -m venv venv
source venv/bin/activate

# Install abogen
pip3 install abogen

# For Silicon Mac (M1, M2 etc.)
# After installing abogen, we need to install Kokoro's development version which includes MPS support.
pip3 install git+https://github.com/hexgrad/kokoro.git

Linux

首先,如果你尚未安装 uv,请先进行安装。

# Install espeak-ng
sudo apt install espeak-ng # Ubuntu/Debian
sudo pacman -S espeak-ng # Arch Linux
sudo dnf install espeak-ng # Fedora

# For NVIDIA GPUs or without GPU - No need to include [cuda] in here.
uv tool install --python 3.12 abogen

# For AMD GPUs (ROCm 6.4)
uv tool install --python 3.12 abogen[rocm] --extra-index-url https://download.pytorch.org/whl/nightly/rocm6.4 --index-strategy unsafe-best-match
备选方案:使用 pip 安装(点击展开)
# Install espeak-ng
sudo apt install espeak-ng # Ubuntu/Debian
sudo pacman -S espeak-ng # Arch Linux
sudo dnf install espeak-ng # Fedora

# Create a virtual environment (recommended)
mkdir abogen && cd abogen
python3 -m venv venv
source venv/bin/activate

# Install abogen
pip3 install abogen

# For NVIDIA GPUs:
# Already supported, no need to install CUDA separately.

# For AMD GPUs:
# After installing abogen, we need to uninstall the existing torch package
pip3 uninstall torch 
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm6.4

参见 如何解决“CUDA GPU 不可用。正在使用 CPU”警告?

参见 如何修复 Linux 中的“警告:脚本 abogen-cli 安装在 '/home/username/.local/bin',该目录不在 PATH 中”错误?

参见 如何修复“未找到匹配的发行版”错误?

参见 如何修复“[WinError 1114] 动态链接库 (DLL) 初始化例程失败”错误?

特别感谢 @hg000125#23 中的贡献。AMD GPU 支持的实现离不开他的工作。

界面

Abogen 提供两种界面,但目前它们具有不同的功能集。Web UI 包含一些较新的功能,这些功能仍在集成到桌面应用程序中。

命令 界面 功能
abogen PyQt6 桌面图形界面 稳定的核心功能
abogen-web Flask Web 界面 核心功能 + Supertonic TTSLLM 规范化Audiobookshelf 集成及更多!

注意: Web UI 正在积极开发中。我们正致力于将这些新功能集成到 PyQt 桌面应用中。在此之前,Web UI 提供功能最丰富的体验。

特别感谢 @jeremiahsb 使这一切成为可能!他的 重大贡献(超过 55,000 行代码!)让整个 Web UI 得以实现,这真的让我感到惊喜。

🖥️ 桌面应用程序 (PyQt)

如何运行?

您只需运行以下命令即可启动 Abogen 桌面图形界面:

abogen

Tip

如果您使用 Windows 安装程序 (WINDOWS_INSTALL.bat) 安装了 Abogen,它应该已在同一文件夹或您的桌面上创建了快捷方式。您可以从那里运行它。如果您丢失了快捷方式,Abogen 位于 python_embedded/Scripts/abogen.exe。您可以直接从那里运行它。

如何使用?

  1. 拖放任何 ePub、PDF、文本、Markdown 或字幕文件(或使用内置文本编辑器)
  2. 配置设置:
    • 设置语音速度
    • 选择语音(或使用语音混合器创建自定义语音)
    • 选择字幕生成样式(按句子、单词等)
    • 选择输出格式
    • 选择输出保存位置
  3. 点击开始

实际操作

这是 Abogen 的实际操作演示:在此演示中,它仅用 11 秒处理了约 3,000 个字符的文本,并将其转换为 3 分 28 秒的音频,而我使用的是低端 RTX 2060 移动版笔记本 GPU。您的结果可能会因硬件而异。

配置

选项 描述
输入框 拖放 ePubPDF.TXT.MD.SRT.ASS.VTT 文件(或使用内置文本编辑器)
队列选项 将多个文件添加到队列中进行批量处理,每个文件可单独设置。详见 队列模式
速度 调整语速,范围从 0.1x2.0x
选择语音 语言代码的第一个字母(例如,a 代表美式英语,b 代表英式英语等),第二个字母 m 代表男性,f 代表女性。
语音混合器 通过配置文件系统混合不同的语音模型来创建自定义语音。详见 语音混合器
语音预览 处理前先聆听所选语音。
生成字幕 禁用句子句子 + 逗号句子 + 高亮1 词2 词3 词 等(表示每个字幕条目的单词数)
输出语音格式 .WAV.FLAC.MP3.OPUS(最佳压缩)M4B(带章节)
输出字幕格式 将字幕格式配置为 SRT(标准)ASS(宽屏)ASS(窄屏)ASS(居中宽屏)ASS(居中窄屏)
将单个换行符替换为空格 将文本中的单个换行符替换为空格。这对于包含多余换行符的文本很有用。
保存位置 保存到输入文件旁保存到桌面选择输出文件夹

特别感谢 @brianxiadong 在 PR #75 中添加了 Markdown 支持

特别感谢 @jborza 在 PR #10 中添加了章节支持

特别感谢 @mleg 在 PR #94 中添加了字幕生成的 选项

书籍处理选项 描述
章节控制 从 ePUB 或 Markdown 文件中选择特定 章节,或从 PDF 中选择 章节 + 页面
将每个章节单独保存 将电子书中的每个章节保存为单独的音频文件。
创建合并版本 创建一个合并所有章节的单个音频文件。(如果 将每个章节单独保存 被禁用,此选项将成为默认行为。)
保存到带元数据的项目文件夹 将转换后的项目保存到带有可用元数据文件的项目文件夹中。
菜单选项 描述
主题 使用 系统浅色深色 选项更改应用程序主题。
配置每个字幕的最大单词数 配置每个字幕条目的最大单词数。
配置章节间的静音时长 配置章节间的静音时长(以秒为单位)。
配置日志窗口的最大行数 配置日志窗口中显示的最大行数。
单独章节音频格式 将单独章节的音频格式配置为 wavflacmp3opus
创建桌面快捷方式 在桌面上创建快捷方式,方便访问。
打开配置目录 打开存储配置文件的目录。
打开缓存目录 打开存储转换后的文本文件的缓存目录。
清除缓存文件 删除转换或预览过程中创建的缓存文件。
在字幕间使用静音间隙 通过让语音持续到字幕条目之间的静音间隙,防止不必要的音频加速。简而言之,它忽略字幕条目中的结束时间,并使用直到下一个字幕条目开始前的静音空间。禁用时,它会加速音频以适应字幕中指定的确切时间间隔。(适用于字幕文件)。
字幕速度调整方法 选择需要时如何加速音频:TTS 重新生成(质量更好) 以更快的速度重新生成音频,而 FFmpeg 时间拉伸(速度更快) 快速加速生成的音频。(适用于字幕文件)。
使用 spaCy 进行句子分割 启用此选项后,Abogen 将使用 spaCy 更准确地检测句子边界,而不是使用标点符号(如句号、问号等)来拆分句子,因为后者可能会错误地切断诸如 "Mr." 或 "Dr." 之类的短语。使用 spaCy,句子的划分会更准确。对于非英文文本,spaCy 在音频生成之前运行以创建句子块。对于英文文本,spaCy 在字幕生成期间运行以改善时间同步和可读性。仅当字幕模式为 句子句子 + 逗号 时才使用 spaCy。如果您更喜欢旧的标点符号拆分方法,可以关闭此选项。
预下载模型和语音以供离线使用 打开一个窗口,显示可用的模型和语音。点击 全部下载 按钮下载所有必需的模型和语音,使您可以完全离线使用 Abogen,无需任何互联网连接。
禁用 Kokoro 的互联网访问 阻止 Kokoro 从 HuggingFace Hub 下载模型或语音,适用于离线使用。
启动时检查更新 程序启动时自动检查更新。
重置为默认设置 将所有设置重置为默认值。

特别感谢 @robmckinnon 在 PR #65 中添加了句子 + 高亮功能

语音混合器

借助语音混合器,您可以通过混合不同的语音模型来创建自定义语音。您可以调整每个语音的权重,并将自定义语音另存为配置文件,以便日后使用。语音混合器让您能够打造独特且个性化的声音。

特别感谢 @jborza,他在 #5 中的贡献使这一功能成为可能

队列模式

Abogen 支持队列模式,允许您将多个文件添加到处理队列中。如果您想批量转换多个文件,此功能非常实用。

  • 您可以通过队列管理器中的 添加文件 按钮直接添加文本文件(.txt)和字幕文件(.srt.ass.vtt),也可以将它们拖放到队列列表中。若要添加 PDF、EPUB 或 markdown 文件,请使用主窗口中的输入框,然后点击 添加到队列 按钮。
  • 队列中的每个文件都会保留添加时生效的配置设置。之后更改主窗口配置不会影响已在队列中的文件。
  • 您可以启用 使用当前选择覆盖项目设置 选项,强制队列中的所有项目使用主窗口当前选择的配置,覆盖它们的保存设置。
  • 将鼠标悬停在文件上可以查看每个文件的配置。

Abogen 将自动处理队列中的每个项目,并按配置保存输出。

特别感谢 @jborza 在 PR #35 中添加了队列模式


🌐 Web 应用程序(WebUI)

如何运行?

运行以下命令以启动 Web UI:

abogen-web

然后打开 http://localhost:8808,将您的文档拖入其中。任务在后台工作器中运行,浏览器会自动更新。

使用 Web UI

  1. 上传文档(拖放或使用上传按钮)。
  2. 选择语音、语言、语速、字幕样式和输出格式。
  3. 点击 创建任务。任务会立即出现在队列中。
  4. 实时查看进度和日志更新。完成后下载音频/字幕资源。
  5. 随时取消或删除任务。下载日志以进行故障排除。

多个任务可以按顺序运行;工作器会按顺序处理它们。

容器镜像

您可以直接从仓库根目录构建轻量级容器镜像:

docker build -t abogen .
mkdir -p ~/abogen-data/uploads ~/abogen-data/outputs
docker run --rm \
  -p 8808:8808 \
  -v ~/abogen-data:/data \
  --name abogen \
  abogen

浏览 http://localhost:8808。上传的源文件存储在 /data/uploads 中,生成的音频/字幕显示在 /data/outputs 中。

容器环境变量

变量 默认值 用途
ABOGEN_HOST 0.0.0.0 Flask 服务器的绑定地址
ABOGEN_PORT 8808 HTTP 端口
ABOGEN_DEBUG false 启用 Flask 调试模式
ABOGEN_UPLOAD_ROOT /data/uploads 上传文件的存储目录
ABOGEN_OUTPUT_ROOT /data/outputs 生成的音频和字幕的目录(ABOGEN_OUTPUT_DIR 的旧别名)
ABOGEN_OUTPUT_DIR /data/outputs 生成的音频/字幕的容器路径
ABOGEN_SETTINGS_DIR /config JSON 设置/配置的容器路径
ABOGEN_TEMP_DIR /data/cache(Docker)或平台缓存目录 临时音频工作文件的容器路径
ABOGEN_UID 1000 容器应运行的 UID(与主机用户匹配)
ABOGEN_GID 1000 容器应运行的 GID(与主机组匹配)
ABOGEN_LLM_BASE_URL "" 用于填充“设置 → LLM”面板的 OpenAI 兼容端点
ABOGEN_LLM_API_KEY "" 传递给上述端点的 API 密钥
ABOGEN_LLM_MODEL "" 刷新模型列表时选择的默认模型
ABOGEN_LLM_TIMEOUT 30 服务器端 LLM 请求的超时时间(秒)
ABOGEN_LLM_CONTEXT_MODE sentence 默认的提示上下文窗口(sentenceparagraphdocument
ABOGEN_LLM_PROMPT "" 植入用户界面的自定义归一化提示模板

启动容器时,使用 -e VAR=value 设置上述任何变量。

要了解用于匹配容器内文件权限的本地 UID/GID,请运行:

id -u
id -g

使用这些值填充您 .env 文件中的 ABOGEN_UID / ABOGEN_GID

通过 Docker Compose 运行时,请在您的 .env 文件中设置 ABOGEN_SETTINGS_DIRABOGEN_OUTPUT_DIRABOGEN_TEMP_DIR,指定要挂载到容器中的主机目录。Compose 会将它们分别映射到 /config/data/outputs/data/cache,同时将这些容器内路径提供给应用程序使用。默认情况下,非音频缓存(例如 Hugging Face 下载内容)会保存在容器内部的 /tmp/abogen-home/.cache 目录中,因此只有转换过程中的临时数据会存放在挂载的 ABOGEN_TEMP_DIR 中。在启动服务栈之前,请确保每个主机目录都已存在,并且可被您配置的 UID/GID 写入。

Docker Compose(默认启用 GPU)

仓库中包含 docker-compose.yaml,默认针对 GPU 主机配置。请安装 NVIDIA Container Toolkit 并运行:

docker compose up -d --build

关键构建/运行时控制项:

  • TORCH_VERSION – 固定与您的驱动程序匹配的特定 PyTorch 版本(若留空,则使用已配置索引上的最新版本)。
  • TORCH_INDEX_URL – 当目标为不同的 CUDA 构建版本时,更换 PyTorch 下载索引。
  • ABOGEN_DATA – 存储上传内容/输出的主机路径(默认为 ./data)。

仅 CPU 部署:在 compose 文件中注释掉 deploy.resources.reservations.devices 块(以及可选的 runtime: nvidia 行)。Compose 将在不请求 GPU 的情况下运行。如果您更喜欢传统命令行界面:

docker build -f abogen/Dockerfile -t abogen-gpu .
docker run --rm \
  --gpus all \
  -p 8808:8808 \
  -v ~/abogen-data:/data \
  abogen-gpu

LLM辅助文本标准化

abogen 可借助兼容 OpenAI 的大型语言模型处理复杂的撇号和缩写。可通过 设置 → LLM 进行配置:

  1. 输入端点的基础 URL(Ollama、OpenAI 代理等),并在需要时输入 API 密钥。使用服务器根目录(对于 Ollama:http://localhost:11434)——abogen 会自动追加 /v1/...,但也接受已以 /v1 结尾的输入。
  2. 点击 刷新模型 加载模型目录,选择默认模型,并调整超时时间或提示词模板。
  3. 使用预览框测试提示词,然后保存设置。标准化面板可结合当前配置合成简短的音频预览。

在 Docker 或 CI 管道中运行时,可在 .env 文件中通过 ABOGEN_LLM_* 变量自动填充表单。.env.example 文件包含了本地 Ollama 服务器的示例值。

Audiobookshelf 集成

abogen 可将生成完成的有声书直接推送到 Audiobookshelf。通过 设置 → 集成 → Audiobookshelf 进行配置,需提供:

  • 基础 URL – 可访问 Audiobookshelf 服务器的 HTTPS 源(及可选路径前缀),例如 https://abs.example.comhttps://media.example.com/abs不要 追加 /api
  • 库 ID – 目标 Audiobookshelf 库的标识符(从 ABS 中该库的设置页面复制)。
  • 文件夹(名称或 ID) – 该库内的目标文件夹。输入与 Audiobookshelf 中显示完全一致的文件夹名称(abogen 会自动将其解析为正确的 ID),粘贴原始 folderId,或点击 浏览文件夹 获取可用文件夹并填充该字段。
  • API 令牌 – 在 Audiobookshelf 的 账户 → API 令牌 下生成的个人访问令牌。

连接成功后,您可以为未来的任务启用自动上传,或从队列中触发单个上传。

反向代理检查清单(Nginx Proxy Manager)

当 Audiobookshelf 位于 Nginx Proxy Manager (NPM) 后方时,请确保 API 路径和头信息未被修改地传递到后端:

  1. 创建一个 代理主机,指向您的 ABS 容器或主机(默认转发端口 13378)。
  2. SSL 选项卡下,启用证书并勾选 强制 SSL(如果您希望仅使用 HTTPS)。
  3. 高级 选项卡下,追加以下代码片段,以确保 bearer 令牌、客户端 IP 和大型上传能在代理跳转中保留:
    
    

proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header Authorization $http_authorization; client_max_body_size 5g; proxy_read_timeout 300s; proxy_connect_timeout 300s;


  1. Disable Block Common Exploits (it strips Authorization headers in some NPM builds).
  2. Enable Websockets Support on the main proxy screen (Audiobookshelf uses it for the web UI, and it keeps the reverse proxy configuration consistent).
  3. If you publish Audiobookshelf under a path prefix (for example /abs), add a Custom Location with Location: /abs/ and set the Forward Path to /. That rewrite strips the /abs prefix before traffic reaches Audiobookshelf so /abs/api/... on the internet becomes /api/... on the backend. Use the same prefixed URL in Abogen’s “Base URL” field.

After saving the proxy host, test the API from the machine running Abogen:

curl -i "https://abs.example.com/api/libraries" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

如果您仍然收到 Cannot GET /api/... 错误,说明代理正在重写路径。请仔细检查 自定义位置 表格(/abs/ 对应的 转发路径 列应为空),并在发出 curl 请求时查看 NPM 访问/错误日志,确认后端收到了完整的 /api/libraries URL。

若 JSON 响应确认了库列表,则表示代理正在正确路由 API 调用。之后,您可以使用 浏览文件夹 确认库内容,在 Abogen 的设置中运行 测试连接(它会验证库并解析文件夹),以及在已完成的任务上使用 “发送到 Audiobookshelf” 按钮。

JSON 端点

需要机器可读的状态更新?仪表板会调用一小组辅助端点,您可以复用它们:

  • GET /api/jobs/<id> 以 JSON 格式返回作业元数据、进度和日志行。
  • GET /partials/jobs 将实时作业列表渲染为 HTML(htmx 使用此端点进行轮询)。
  • GET /partials/jobs/<id>/logs 仅渲染日志窗口。

我们计划添加更多自动化钩子;如果您需要其他路由,非常欢迎贡献代码。


核心功能(两者均具备)

关于章节标记

当您处理 ePUB、PDF 或 markdown 文件时,Abogen 会将它们转换为存储在缓存目录中的文本文件。当您点击 “编辑” 时,实际上是在修改这些转换后的文本文件。在这些文本文件中,您会注意到如下所示的标签:

<<CHAPTER_MARKER:Chapter Title>>

这些是章节标记。当您处理 EPUB、PDF 或 markdown 文件时,系统会根据您选择的章节自动添加它们。它们有重要的用途:

  • 允许您将文本分割为每个章节的单独音频文件
  • 若发生错误,您可以只重新处理特定章节,而非整个文件,从而节省时间

您可以手动将这些标记添加到纯文本文件中,以获得相同的好处。只需像这样将它们包含在您的文本中:

<<CHAPTER_MARKER:Introduction>>
This is the beginning of my text...  

<<CHAPTER_MARKER:Main Content>> 
Here's another part...  

处理文本文件时,Abogen 会自动检测到这些标记,并询问您是否要将每章单独保存并创建一个合并版本。

Abogen Chapter Marker

关于元数据标签

与章节标记类似,您可以为 M4B 文件添加元数据标签。这对于支持元数据的有声书播放器非常有用,您可以通过它添加标题、作者、年份等信息。处理 EPUB、PDF 或 markdown 文件时,Abogen 会自动添加这些标签,不过您也可以手动将它们添加到文本文件中。请像这样在文本文件的开头添加元数据标签:

<<METADATA_TITLE:Title>>
<<METADATA_ARTIST:Author>>
<<METADATA_ALBUM:Album Title>>
<<METADATA_YEAR:Year>>
<<METADATA_ALBUM_ARTIST:Album Artist>>
<<METADATA_COMPOSER:Narrator>>
<<METADATA_GENRE:Audiobook>>
<<METADATA_COVER_PATH:path/to/cover.jpg>>

注意:METADATA_COVER_PATH 用于将封面图片嵌入生成的 M4B 文件中。abogen 会自动从 EPUB 和 PDF 文件中提取封面,并为您添加此标签。

关于基于时间戳的文本文件

与将字幕文件转换为音频类似,abogen 能够自动检测包含 HH:MM:SSHH:MM:SS,msHH:MM:SS.ms 格式时间戳的文本文件。当在您的文本文件中检测到时间戳时,abogen 会询问您是否要将其用于音频计时。这对于创建定时旁白、脚本或需要精确控制每个片段朗读时间的文稿非常有用。

请按以下格式设置您的文本文件:

00:00:00
This is the first segment of text.

00:00:15
This is the second segment, starting at 15 seconds.

00:00:45
And this is the third segment, starting at 45 seconds.

重要说明:

  • 时间戳必须采用 HH:MM:SSHH:MM:SS,msHH:MM:SS.ms 格式(例如,00:05:30 表示 5 分 30 秒,00:05:30.500 表示 5 分 30.5 秒)
  • 毫秒为可选,可提供高达千分之一秒的精度
  • 第一个时间戳之前的文本(如有)将自动从 00:00:00 开始
  • 使用时间戳时,字幕生成模式设置将被忽略

Supported Languages

# 🇺🇸 'a' => American English, 🇬🇧 'b' => British English
# 🇪🇸 'e' => Spanish es
# 🇫🇷 'f' => French fr-fr
# 🇮🇳 'h' => Hindi hi
# 🇮🇹 'i' => Italian it
# 🇯🇵 'j' => Japanese: pip install misaki[ja]
# 🇧🇷 'p' => Brazilian Portuguese pt-br
# 🇨🇳 'z' => Mandarin Chinese: pip install misaki[zh]

若需查看支持的语言和语音的完整列表,请参考Kokoro的VOICES.md。要收听音频输出示例,请参见SAMPLES.md

参见如何解决日语音频无法播放的问题?


指南与故障排除

MPV 配置

我强烈建议使用MPV来播放您的音频文件,因为它即使在没有视频轨道的情况下也支持显示字幕。以下是我的mpv.conf配置:

# --- MPV Settings ---
save-position-on-quit
keep-open=yes
audio-display=no
# --- Subtitle ---
sub-ass-override=no
sub-margin-y=50
sub-margin-x=50
# --- Audio Quality ---
audio-spdif=ac3,dts,eac3,truehd,dts-hd
audio-channels=auto
audio-samplerate=48000
volume-max=200

类似项目

abogen 是一个独立项目,但其灵感来源于其他项目,并与部分项目存在相似之处。以下是一些例子:

  • audiblez:从电子书生成有声书。(支持命令行界面和图形用户界面)
  • autiobooks:自动将 EPUB 转换为有声书
  • pdf-narrator:轻松将您的 PDF 和 EPUB 转换为有声书。
  • epub_to_audiobook:EPUB 转有声书转换器,针对 Audiobookshelf 进行了优化
  • ebook2audiobook:使用动态 AI 模型和语音克隆技术,将电子书转换为带有章节和元数据的有声书

路线图

  • 添加使用 docling/teserract 对 PDF 文件进行 OCR 扫描的功能。
  • 为 .m4a 文件添加章节元数据。(问题 #9,拉取请求 #10
  • 在图形用户界面中添加对不同语言的支持。
  • 添加语音公式功能,支持混合不同的语音模型。(问题 #1,拉取请求 #5
  • 添加对 kokoro-onnx 的支持(如果有必要)。
  • 添加深色模式。

故障排除

如果您在运行 abogen 时遇到任何问题,请尝试通过命令行启动它:

abogen-cli

如果您使用 Windows 安装程序 (WINDOWS_INSTALL.bat) 进行了安装,请转到 python_embedded/Scripts 并运行:

abogen-cli.exe

这将以命令行模式启动 Abogen 并显示详细的错误消息。请在 Issues 页面提交新 issue,并附上错误消息和问题描述。

常见问题与解决方案

关于“abogen”这个名称

“abogen”这个名称来源于“audiobook generator”(有声书生成器)的缩写形式,这也正是本项目的用途。

项目发布后,我从社区反馈中了解到,前缀“abo”在某些地区(尤其是澳大利亚和新西兰)不幸可能被理解为种族歧视性用语。由于英语并非我的母语,我在命名项目时并未意识到这一点。

我想明确表示,选择这个名称纯粹是出于其技术含义,绝无冒犯之意。非常感谢那些善意指出这一点的人,这有助于确保项目对所有人都保持尊重和欢迎的态度。

如何解决“CUDA GPU is not available. Using CPU”警告?

此消息表示 PyTorch 无法使用您的 GPU,已回退到 CPU。在 Windows 系统上,Abogen 仅支持带 CUDA 的 NVIDIA GPU。AMD GPU 在 Windows 上不受支持(仅在 Linux 系统上通过 ROCm 支持)。Abogen 在 CPU 上仍可运行,但处理速度会比使用受支持的 GPU 慢。

如果您在 Windows 上使用兼容的 NVIDIA GPU,但仍看到此警告: 在 Abogen 文件夹(包含 python_embedded 的文件夹)中打开终端,并输入:

python_embedded\python.exe -m pip install --force-reinstall torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0 --index-url https://download.pytorch.org/whl/cu128

如果问题未解决,且您使用的是不支持 CUDA 12.8 的较旧 NVIDIA GPU,您可以尝试安装支持您 GPU 的旧版本 PyTorch。例如,对于 CUDA 12.6,运行:

python_embedded\python.exe -m pip install --force-reinstall torch==2.8.0+cu126 torchvision==0.23.0+cu126 torchaudio==2.8.0 --index-url https://download.pytorch.org/whl/cu126

如果您使用的是 AMD GPU,则需要使用 Linux 并按照 Linux/ROCm 说明操作。如果您希望继续在 CPU 上运行,则无需执行任何操作,但性能会有所降低。更多详情请参见 #32

如果您使用 uv 安装了 Abogen,可以卸载并尝试使用其他 CUDA 版本重新安装:

# 首先卸载 Abogen
uv tool uninstall abogen
# 尝试适用于旧驱动的 CUDA 12.6
uv tool install --python 3.12 abogen[cuda126] --extra-index-url https://download.pytorch.org/whl/cu126 --index-strategy unsafe-best-match
# 如果不行,尝试适用于新驱动的 CUDA 13.0
uv tool install --python 3.12 abogen[cuda130] --extra-index-url https://download.pytorch.org/whl/cu130 --index-strategy unsafe-best-match
如何修复 Linux 中的“WARNING: The script abogen-cli is installed in '/home/username/.local/bin' which is not on PATH”错误?

运行以下命令将 Abogen 添加到您的 PATH 中:

echo "export PATH=\"/home/$USER/.local/bin:\$PATH\"" >> ~/.bashrc && source ~/.bashrc
如何修复“No matching distribution found”错误?

尝试在受支持的 Python 版本(3.10 至 3.12)上安装 Abogen。我建议使用 uv 进行安装。您也可以在 Linux 上使用 pyenv 轻松管理多个 Python 版本。可观看 NetworkChuck 的这个视频获取快速指南。

如何修复“[WinError 1114] A dynamic link library (DLL) initialization routine failed”错误?

我在没有 GPU 支持的虚拟 Windows 机器上尝试运行 Abogen 时遇到过此错误。以下是我的解决方法: 如果您使用 Windows 安装程序 (WINDOWS_INSTALL.bat) 安装了 Abogen,请转到 Abogen 文件夹(包含 python_embedded 的文件夹),在那里打开终端并运行:

python_embedded\python.exe -m pip install --force-reinstall torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0 --index-url https://download.pytorch.org/whl/cu128

如果您使用 pip 安装了 Abogen,请在虚拟环境中打开终端并运行:

pip install torch==2.8.0 torchaudio==2.8.0 torchvision==0.23.0 --index-url https://download.pytorch.org/whl/cu128
如何解决日语音频无法正常工作的问题?

日语音频可能需要额外配置。 我不确定确切的解决方案,但似乎与为 Kokoro 安装日语支持的额外依赖项有关。更多信息请查看 #56

如何卸载 Abogen?
  • 从设置菜单中,进入“打开配置目录”并删除该目录。
  • 从设置菜单中,进入“打开缓存目录”并删除该目录。
  • 如果您使用 pip 安装了 Abogen,请输入:
pip uninstall abogen # 卸载 abogen
pip cache purge # 清除 pip 缓存
  • 如果您使用 uv 安装了 Abogen,请输入:
uv tool uninstall abogen # 卸载 abogen
uv cache clear # 清除 uv 缓存
  • 如果您使用 Windows 安装程序(WINDOWS_INSTALL.bat)安装了 Abogen,只需删除包含 Abogen 的文件夹即可。它会将所有内容安装在 python_embedded 文件夹内,不会创建其他目录。
  • 如果您安装了 espeak-ng,则需要单独卸载它。

贡献

欢迎大家贡献力量!如果您有新功能、改进或错误修复的想法,请 Fork 该仓库并提交拉取请求。

面向开发者和贡献者

如果您想修改代码并为开发做出贡献,可以下载仓库,解压后运行以下命令来构建安装该软件包:

# Go to the directory where you extracted the repository and run:
pip install -e .[dev]       # Installs the package in editable mode with build dependencies
python -m build             # Builds the package in dist folder (optional)
abogen                      # Opens the GUI

请确保您使用的是 Python 3.10 至 3.12 版本。如有需要,您需要创建一个虚拟环境。

替代方案:使用 uv(点击展开)
# Go to the directory where you extracted the repository and run:
uv venv --python 3.12       # Creates a virtual environment with Python 3.12
# After activating the virtual environment, run:
uv pip install -e .         # Installs the package in editable mode
uv build                    # Builds the package in dist folder (optional)
abogen                      # Opens the GUI

欢迎探索代码并随意进行任何修改。

致谢

  • Web UI 由 @jeremiahsb 实现
  • Abogen 使用 Kokoro 进行高质量、自然流畅的文本转语音合成。非常感谢 Kokoro 团队为此提供的支持。
  • 感谢 spaCy 项目提供的句子分割工具,帮助 Abogen 实现更清晰、更自然的句子分割。
  • 感谢 @wojiushixiaobai 提供的 Embedded Python 包。这些经过修改的包预安装了 pip,使 Abogen 能够作为独立应用程序运行,而无需用户在 Windows 中单独安装 Python。
  • 感谢 EbookLib 的创建者,这是一个用于读取和写入 ePub 文件的 Python 库,Abogen 使用它来提取 ePub 文件中的文本。
  • 特别感谢 PyQt 团队提供的跨平台 GUI 工具包,为 Abogen 的界面提供了强大支持。
  • 图标:美国英国西班牙法国印度意大利日本巴西中国女性男性调整语音 ID 图标由 Icons8 提供。

许可证

本项目采用 MIT 许可证 - 详情请参见 LICENSE 文件。 Kokoro 采用 Apache-2.0 许可证,允许商业使用、修改、分发和私人使用。

Star History

Star History Chart

Note

Abogen 支持为所有语言生成字幕。不过,单词级字幕模式(例如“1 word”“2 words”“3 words”等)仅适用于英语,这是因为 Kokoro 仅为英语文本提供时间戳标记。对于非英语语言,Abogen 会使用基于时长的备选方案,该方案支持句子级和逗号分隔的字幕模式(“Line”“Sentence”“Sentence + Comma”)。如果您需要其他语言的单词级字幕,请在 Kokoro 项目 中请求该功能。

标签:audiobook, kokoro, text-to-speech, TTS, audiobook generator, audiobooks, text to speech, audiobook maker, audiobook creator, audiobook generator, voice-synthesis, text to audio, text to audio converter, text to speech converter, text to speech generator, text to speech software, text to speech app, epub to audio, pdf to audio, markdown to audio, subtitle to audio, srt to audio, ass to audio, vtt to audio, webvtt to audio, content-creation, media-generation