引言
"The Future of Voice, Now Generating."
这是「一天一个开源项目」系列的第 60 篇文章。今天介绍的项目是 IndexTTS (GitHub)。
想要工业级、可控、高效的零样本语音合成?IndexTTS 是 B 站 IndexTeam 开源的 零样本 TTS 系统 :音色克隆 、情感控制 、时长控制(IndexTTS2)。支持情感参考音频、情感向量、文本情感描述,实现情感与音色解耦,多语言(中英等),提供 WebUI 与 Python API,基于 uv 管理依赖。
你将学到什么
- IndexTTS 的核心能力与架构
- IndexTTS2 的情感控制与时长控制
- 音色克隆、情感参考、文本情感的使用方式
- 环境搭建与 WebUI 快速开始
- 与同类 TTS 的对比
前置知识
- 对 TTS、语音合成有基本了解
- 有 NVIDIA GPU 与 CUDA 12.8+(推荐)
项目背景
项目简介
IndexTTS 是 B 站 IndexTeam 开源的工业级可控零样本 TTS 系统 。用户提供一段参考音频即可克隆音色,同时可独立控制情感:通过情感参考音频、8 维情感向量或文本描述。IndexTTS2 进一步实现自回归 TTS 的精确时长控制,支持可控与不可控两种模式,情感与音色解耦,多语言表现优异。
团队
- 团队 :B 站 IndexTeam(indexspeech@bilibili.com)
- 核心作者:Wei Deng、Siyi Zhou、Jingchen Shu、Xun Zhou、Jinchao Wang 等
- 社区 :QQ 群、Discord
项目数据
- ⭐ GitHub Stars: 19.4k+
- 🍴 Forks: 2.4k+
- 📄 License: 见仓库 LICENSE
- 🌐 Demo : IndexTTS2 演示页
- 📦 模型 : HuggingFace、ModelScope
主要功能
核心能力
| 能力 | 说明 |
|---|---|
| 零样本音色克隆 | 单段参考音频即可克隆音色 |
| 情感控制 | 情感参考音频、8 维情感向量、文本情感描述 |
| 情感与音色解耦 | 音色来自音色 prompt,情感来自情感 prompt,独立控制 |
| 时长控制 | IndexTTS2 支持精确时长控制(自回归 TTS 首例) |
| 多语言 | 中文、英文等,IndexTTS1.5 显著提升英文 |
| 拼音控制 | 支持拼音标注精确发音 |
使用场景
- 视频配音:严格音画同步的时长控制
- 有声书/播客:情感丰富的朗读
- 游戏/虚拟角色:音色克隆 + 情感控制
- 多语言内容:中英双语合成
快速开始
环境要求:git、git-lfs、uv、CUDA 12.8+(推荐)
安装:
bash
git clone https://github.com/index-tts/index-tts.git && cd index-tts
git lfs pull
pip install -U uv
uv sync --all-extras
下载模型(IndexTTS-2):
bash
uv tool install "huggingface-hub[cli,hf_xet]"
hf download IndexTeam/IndexTTS-2 --local-dir=checkpoints
启动 WebUI:
bash
uv run webui.py
访问 http://127.0.0.1:7860。
Python 调用示例:
python
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints",
use_fp16=True, use_cuda_kernel=False, use_deepspeed=False)
# 基础音色克隆
tts.infer(spk_audio_prompt='examples/voice_01.wav', text="Translate for me, what is a surprise!",
output_path="gen.wav", verbose=True)
# 情感参考音频
tts.infer(spk_audio_prompt='examples/voice_07.wav', text="酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。",
output_path="gen.wav", emo_audio_prompt="examples/emo_sad.wav", verbose=True)
# 情感向量 [happy, angry, sad, afraid, disgusted, melancholic, surprised, calm]
tts.infer(spk_audio_prompt='examples/09.wav', text="对不起嘛!我的记性真的不太好~",
output_path="gen.wav", emo_vector=[0, 0, 0.8, 0, 0, 0, 0, 0], verbose=True)
# 文本情感描述
tts.infer(spk_audio_prompt='examples/voice_12.wav', text="快躲起来!是他要来了!",
output_path="gen.wav", use_emo_text=True, emo_alpha=0.6, verbose=True)
情感控制方式
| 方式 | 参数 | 说明 |
|---|---|---|
| 情感参考音频 | emo_audio_prompt |
从参考音频提取情感 |
| 情感向量 | emo_vector |
8 维:[happy, angry, sad, afraid, disgusted, melancholic, surprised, calm] |
| 文本情感 | use_emo_text=True 或 emo_text |
从文本或指定描述生成情感 |
| 情感强度 | emo_alpha |
0.0--1.0,默认 1.0 |
项目优势
| 对比项 | IndexTTS2 | 传统 TTS | 其他零样本 TTS |
|---|---|---|---|
| 时长控制 | 精确可控(自回归首例) | 通常不可控 | 多数不可控 |
| 情感控制 | 多模态(音频/向量/文本) | 有限 | 视模型而定 |
| 情感与音色 | 解耦,独立控制 | 常耦合 | 常耦合 |
| 零样本 | 单段参考即可 | 需训练 | 视模型而定 |
| 多语言 | 中英等 | 视模型而定 | 视模型而定 |
项目详细剖析
版本演进
| 版本 | 发布时间 | 主要特性 |
|---|---|---|
| IndexTTS-1.0 | 2025/03 | 模型权重与推理代码 |
| IndexTTS-1.5 | 2025/05 | 稳定性提升、英文表现增强 |
| IndexTTS-2 | 2025/09 | 精确时长控制、情感解耦、多模态情感控制 |
技术要点
- 自回归 + 时长控制:首次在自回归 TTS 中实现精确时长控制,适配视频配音等场景
- GPT 潜在表示:增强高情感表达时的清晰度
- 三阶段训练:提升生成稳定性
- 软指令机制:基于 Qwen3 微调,用文本描述引导情感
推荐配置
- FP16:降低显存、加速推理,质量损失很小
- DeepSpeed:视硬件可能加速,需实测
- CUDA 12.8+:确保正确安装
依赖管理
- 仅支持 uv:官方明确要求使用 uv,conda/pip 可能导致依赖版本错误、GPU 不可用等问题
- 国内镜像 :
uv sync --all-extras --default-index "https://mirrors.aliyun.com/pypi/simple"
项目地址与资源
官方资源
- 🌟 GitHub : github.com/index-tts/i...
- 🌐 Demo : IndexTTS2 演示页
- 📦 HuggingFace : IndexTeam/IndexTTS-2
- 📦 ModelScope : IndexTeam/IndexTTS-2
- 📧 商务合作 : indexspeech@bilibili.com
- 💬 Discord : discord.gg/uT32E7KDmy
- 🐛 Issues : GitHub Issues
适用人群
- 需要高质量零样本 TTS 的开发者
- 视频配音、有声书、播客制作者
- 需要情感与音色独立控制的场景
- 多语言语音合成需求
欢迎来我中的个人主页找到更多有用的知识和有趣的产品