# novel2voice
**Repository Path**: jangviktor/novel2voice
## Basic Information
- **Project Name**: novel2voice
- **Description**: 一键把小说原文、视频字幕(.srt/.ass)文件发给AI Agent,自动调用 MiMo TTS / Edge TTS 生成多角色有声书音频;智能区分人物角色、匹配专属音色、添加情感语调标注,内置 Edge 500 + 音色库。 触发关键词:有声书、小说转语音、字幕转语音、朗读、配音、TTS、多角色语音、视频配音 适用场景:用户提供小说 / 故事文本、字幕文件,需求生成有声书、旁白朗读、语音配音、TTS 音频。
- **Primary Language**: Python
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-16
- **Last Updated**: 2026-08-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

# Novel2Voice
**小说 / 视频字幕 → 多角色有声书,一步到位。**
自动角色识别 · 情感标注 · 智能音色分配 · 异步并发生成 · 500+ 音色
[](https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support)
[](https://mimo.xiaomi.com)
[](https://python.org)
[](https://ffmpeg.org)
[](LICENSE)
[](#)
安装 快速开始 ·
Features ·
音色 ·
Usage ·
工作流 ·
Comparison ·
Docs
---
## 📦 Installation
### 方式一:ClawHub 一键安装(推荐)/腾讯Skillhub一键安装
```bash
openclaw skills install @jangviktor-web/novel2voice
# 腾讯Skillhub 把下面这句话复制到wordbuddy、Qclaw 、openclaw即可安装
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_ff4d9420/novel2voice。
```
### 方式二:直接克隆
```bash
git clone https://github.com/jangviktor-web/novel2voice.git
cd novel2voice
pip install requests charset_normalizer
```
### 方式三:一键安装脚本
```bash
curl -fsSL https://raw.githubusercontent.com/jangviktor-web/novel2voice/main/install.sh | bash
```
### 方式四:手动放入 Skills 目录
```bash
# QoderWork / OpenClaw / Claude Code 等 skills-compatible runtime
cp -r novel2voice ~/.qoderworkcn/skills/novel2voice
```
### 环境要求
| 依赖 | 版本 | 用途 | 必须 |
|---|---|---|---|
| Python | ≥ 3.8 | 主脚本运行 | ✅ |
| FFmpeg | 任意 | MP3 编码 + 响度标准化 | ✅ |
| requests | 最新 | HTTP 请求 TTS API | ✅ |
| charset_normalizer | 最新 | 字幕文件编码检测 | 推荐 |
| 网络连接 | — | 调用 Edge TTS / MiMo API | ✅ |
> [!NOTE]
> Edge TTS 为默认后端,无需 API Key,开箱即用。MiMo TTS 需要额外设置 `MIMO_API_KEY`。
---
## ✨ Features
| | Feature | Description |
|---|---|---|
| 🎭 | **多角色自动分配** | LLM 分析角色性别/年龄/性格,自动匹配最佳音色 |
| 🎨 | **情感风格控制** | 50+ 情感标签(温柔/愤怒/悲伤/撒娇…)、方言、唱歌模式 |
| 📝 | **字幕转语音** | SRT/ASS 字幕文件,多编码自动检测,按时间轴对齐生成 |
| ⚡ | **异步并发** | 多线程 TTS 生成,速度提升 3-5x,支持断点续传 |
| 🔊 | **500+ 音色** | Edge TTS 覆盖 100+ 语言/地区,中文 28 个精品音色 |
| 🎵 | **MiMo TTS** | 小米 MiMo 音色设计、音色复刻、唱歌(需 API Key) |
| 🎧 | **在线试听** | 内置 HTML 音色试听页面,搜索/筛选/一键复制 |
| 📖 | **章节拆分** | 自动识别「第X章/回/节」,按章合并输出 |
| 🔁 | **断点续传** | 中断后自动跳过已完成片段,继续生成 |
| 🎚️ | **响度标准化** | EBU R128 标准响度归一化,听感一致 |
---
## 🚀 Quick Start
### 1. 环境准备
```bash
# 检查依赖
python3 --version # ≥ 3.8
ffmpeg -version # 音频格式转换 + 响度标准化
# 安装 Python 依赖
pip install requests charset_normalizer
```
### 2. 一键生成
```bash
# 小说文本 → 有声书(自动识别角色)
python3 scripts/generate_audiobook.py --auto novel.txt ./output
# 异步并发(推荐,3-5x 加速)
python3 scripts/generate_audiobook.py --auto novel.txt ./output --async --concurrent 5
```
### 3. 完成
输出文件在 `./output/` 目录:
```
output/
├── output_complete.mp3 ← 完整有声书
├── chapters/ ← 按章节拆分
│ ├── 001_第一章.mp3
│ └── 002_第二章.mp3
├── segments/ ← 单片段(可选保留)
└── generation_log.json ← 生成日志
```
> [!TIP]
> 首次运行会自动生成 3 段预览(`preview.mp3`),确认音色满意后再全量生成。
---
## 📖 Usage
### 基础用法
```bash
# 自动模式:LLM 分析角色 → 分配音色 → 生成
python3 scripts/generate_audiobook.py --auto novel.txt ./output
```
### 指定角色音色
```bash
# 手动指定角色→音色映射
python3 scripts/generate_audiobook.py --auto novel.txt ./output \
--character-voices '{"旁白":"云扬","许七安":"云希","洛玉衡":"晓涵","李妙真":"晓墨"}'
```
### 字幕转语音
```bash
# SRT 字幕
python3 scripts/generate_audiobook.py --subtitle movie.srt ./output
# ASS 字幕 + 指定说话人音色
python3 scripts/generate_audiobook.py --subtitle anime.ass ./output \
--speaker-voices '{"旁白":"云扬","张三":"云希","李四":"晓晓"}'
```
### 使用 MiMo TTS
```bash
# 需要设置 MIMO_API_KEY 环境变量
export MIMO_API_KEY="your-key-here"
python3 scripts/generate_audiobook.py --auto novel.txt ./output --tts-backend mimo
```
### 仅预览
```bash
# 只生成前 3 段,快速确认音色效果
python3 scripts/generate_audiobook.py --auto novel.txt ./output --preview-only
```
### 情感风格控制
在文本中嵌入风格标签即可控制语气:
```text
(温柔)晚安,好梦。
(东北话)哎呀妈呀,这天儿也忒冷了吧!
(紧张)[深呼吸]呼……冷静,冷静。
(唱歌)原谅我这一生不羁放纵爱自由。
(极其疲惫,有气无力)师傅……到地方了叫我一声……
```
📋 完整风格标签列表
**基础情绪:** 开心 / 悲伤 / 愤怒 / 恐惧 / 惊讶 / 兴奋 / 委屈 / 平静 / 冷漠
**复合情绪:** 怅然 / 欣慰 / 无奈 / 愧疚 / 释然 / 嫉妒 / 厌倦 / 忐忑 / 动情
**语调:** 温柔 / 高冷 / 活泼 / 严肃 / 慵懒 / 俏皮 / 深沉 / 干练 / 凌厉
**音色:** 磁性 / 醇厚 / 清亮 / 空灵 / 稚嫩 / 苍老 / 甜美 / 沙哑 / 醇雅
**人设:** 夹子音 / 御姐音 / 正太音 / 大叔音 / 台湾腔
**方言:** 东北话 / 四川话 / 河南话 / 粤语
**行内标签:** `[吸气]` `[深呼吸]` `[叹气]` `[喘息]` `[笑]` `[轻笑]` `[大笑]` `[冷笑]` `[抽泣]` `[呜咽]` `[哽咽]` `[颤抖]` `[气声]` `[沙哑]`
---
## 🎙️ Voice Library
### Edge TTS 中文音色 · 28 个
|
**👩 女声 (7)**
| 音色 | 声线 | 适配角色 |
|---|---|---|
| 晓晓 | 清亮标准播音 | 旁白、女主、解说 |
| 晓依 | 低沉温柔治愈 | 温柔人妻、治愈系 |
| 晓涵 | 文艺清冷 | 大家闺秀、文艺女主 |
| 晓墨 | 情绪丰富 | 虐文女主、江湖侠女 |
| 晓睿 | 稳重厚实中年 | 主母、长辈、老管家 |
| 晓双 | 清脆孩童少女 | 小丫鬟、幼年女主 |
| 晓梦 | 软萌甜妹 | 甜宠文女配、校园学妹 |
|
**👨 男声 (6)**
| 音色 | 声线 | 适配角色 |
|---|---|---|
| 云希 | 清爽阳光少年 | 少年男主、校园 |
| 云扬 | 央视浑厚播音 | 帝王、官员、旁白 |
| 云健 | 低沉浑厚大叔 | 硬汉、武将、中年男主 |
| 云夏 | 正太少年童声 | 幼年男主、小师弟 |
| 云泽 | 苍老沉稳 | 隐世高人、长老 |
| 云枫 | 平淡务实 | 温润男配、务实配角 |
|
|
**🌍 方言 (9)**
| 音色 | 口音 | 性别 |
|---|---|---|
| 云彪 | 东北 | 男 |
| 晓北 | 东北 | 女 |
| 云登 | 河南 | 男 |
| 云翔 | 山东 | 男 |
| 云熙 | 四川 | 男 |
| 云奇 | 广西 | 男 |
| 晓妮 | 陕西 | 女 |
| 云哲 | 吴语 | 男 |
| 晓彤 | 吴语 | 女 |
|
**🇭🇰 粤语 (3) · 🇹🇼 台湾腔 (3)**
| 音色 | 地区 | 性别 |
|---|---|---|
| 晓佳 | 粤语 | 女 |
| 晓蔓 | 粤语 | 女 |
| 云龙 | 粤语 | 男 |
| 晓晨 | 台湾 | 女 |
| 晓雨 | 台湾 | 女 |
| 云哲 | 台湾 | 男 |
|
### MiMo TTS 音色 · 9 个
| 音色 | 语言 | 声线 | 适配角色 |
|---|---|---|---|
| 冰糖 | 中文 | 清甜治愈 | 温柔女主 |
| 茉莉 | 中文 | 软糯温柔 | 软萌女主、心机女配 |
| 苏打 | 中文 | 清亮少年 | 少年角色 |
| 白桦 | 中文 | 苍老沉稳 | 老年角色 |
| Mia | 英文 | 活泼开朗 | 活泼女主 |
| Chloe | 英文 | 冷淡优雅 | 御姐 |
| Milo | 英文 | 清亮阳光 | 少年男主 |
| Dean | 英文 | 低沉磁性 | 成熟男主 |
> 🎧 **试听全部音色**:用浏览器打开 [`scripts/voice_samples/index.html`](https://jangviktor-web.github.io/novel2voice/scripts/voice_samples/index.html),支持搜索、分类筛选、一键复制音色名称。
---
## 🔄 Workflow
```mermaid
graph LR
A[📄 文本/字幕输入] --> B[📑 章节拆分]
B --> C[🔍 角色提取]
C --> D[🎨 音色匹配]
D --> E[✅ 用户确认]
E --> F[🔊 并发生成]
F --> G[🎚️ 响度标准化]
G --> H[🎵 合并输出]
```
| Step | 说明 | 输出 |
|---|---|---|
| **1. 拆分章节** | 按「第X章/回/节」自动拆分,无标记则单章 | 章节列表 |
| **2. 提取角色** | LLM 分析性别/年龄/性格/说话风格 | 角色档案 |
| **3. 匹配音色** | 根据特征自动匹配 + 情感标注 | 推荐方案表 |
| **4. 用户确认** | 展示方案,可调整任意角色音色 | 确认/修改 |
| **5. 生成音频** | Edge TTS / MiMo TTS 异步并发 | 分段 MP3 |
| **6. 后处理** | 响度标准化 + 按章合并 + ID3 标签 | 最终 MP3 |
---
## 🆚 Comparison
| Feature | Novel2Voice | ebook2audiobook | 传统 TTS 工具 | 在线朗读器 |
|---|---|---|---|---|
| 多角色自动分配 | ✅ LLM 识别 | ✅ | ❌ 手动 | ❌ 单角色 |
| 情感/风格控制 | ✅ 50+ 标签 | ⚠️ SSML | ⚠️ 有限 | ❌ 无 |
| 字幕转语音 | ✅ SRT/ASS | ❌ | ❌ | ❌ |
| 并发生成 | ✅ 异步多线程 | ✅ | ❌ 串行 | ❌ |
| 音色数量 | ✅ 500+ | ✅ | ⚠️ 几十个 | ⚠️ 几个 |
| 中文方言 | ✅ 9 种方言 | ❌ | ❌ | ❌ |
| 断点续传 | ✅ | ✅ | ❌ | ❌ |
| 免费 | ✅ 完全免费 | ✅ | ⚠️ 部分收费 | ❌ 通常收费 |
| 无需 GPU | ✅ | ✅ | ⚠️ 部分需要 | ✅ |
---
## 📁 Structure
```
novel2voice/
├── SKILL.md # Agent 指令(核心工作流)
├── README.md # ← 你在这里
├── install.sh # 一键安装脚本
├── .gitignore
├── references/
│ ├── voice-catalog.md # 完整音色库 + 风格标签 + 角色映射
│ ├── mimo-tts-api.md # MiMo TTS API 文档
│ ├── edge-tts-annotation-guide.md # Edge TTS 标注规范
│ └── generated-long-body.md # 长文本处理策略
└── scripts/
├── generate_audiobook.py # 主生成引擎
├── tts_voice.py # 单句 TTS 工具
├── tts_voice.sh # Shell 版 TTS
├── text_parser.py # 小说文本解析器
├── subtitle_parser.py # SRT/ASS 字幕解析器
├── param_calculator.py # 情感参数计算器
├── generate_voice_samples.py # 音色样本生成器
└── voice_samples/
├── index.html # 🎧 音色试听页面
└── *.mp3 # 28 个音色样本
```
---
## 🛠️ Troubleshooting
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 生成无声音 | FFmpeg 未安装 | `apt install ffmpeg` / `brew install ffmpeg` |
| Edge TTS 连接失败 | 网络问题 | 脚本自动切换备用端点,或检查代理 |
| 中文乱码 | 文件编码非 UTF-8 | 转换编码:`iconv -f GBK -t UTF-8 input.txt` |
| 角色识别不准 | 文本格式特殊 | 手动指定 `--character-voices` |
| 生成太慢 | 未启用并发 | 加 `--async --concurrent 5` |
| Windows 中文路径报错 | cmd 编码问题 | 用 `python` 代替 `python3`,路径避免中文 |
| MiMo TTS 401 | API Key 无效 | 检查 `MIMO_API_KEY` 环境变量 |
| 字幕时间轴偏移 | 重叠时间码 | 默认自动修复,或 `--no-fix-overlaps` 禁用 |
---
## 📚 Documentation
| 文档 | 说明 |
|---|---|
| [SKILL.md](SKILL.md) | Agent 完整工作流指令 |
| [Voice Catalog](references/voice-catalog.md) | 完整音色库、风格标签、角色→音色映射表 |
| [MiMo TTS API](references/mimo-tts-api.md) | MiMo TTS 三种模型 API 文档 |
| [Edge TTS Guide](references/edge-tts-annotation-guide.md) | Edge TTS 标注规范(角色/情绪/断句) |
| [Long Body](references/generated-long-body.md) | 长文本处理扩展说明 |
---
## ⭐️ Star
[](https://repostars.dev/?repos=jangviktor-web%2Fnovel2voice&theme=grape)
---
## 📄 License
[MIT](LICENSE)
---
Built with ❤️ for novel lovers · Powered by Edge TTS & MiMo TTS
🎙️ Novel2Voice — 让每一本小说都有声音