IndexTTS2:情感表达和持续时间控制的自动回归零样本文本转语音的突破

抽象
现有的自回归大规模文本转语音(TTS)模型在语音自然性方面具有优势,但其逐个标记的生成机制使得合成语音的持续时间难以精确控制。这在需要严格视听同步的应用(例如视频配音)中成为一个重大限制。
本文介绍了IndexTTS2,该方法提出了一种新颖、通用、自回归的语音时长控制模型友好方法。
该方法支持两种生成模式:一种明确指定生成的标记数量以精确控制语音持续时间;另一种以自回归的方式自由生成语音,无需指定标记的数量,同时忠实地再现输入提示的韵律特征。
此外,IndexTTS2 实现了情感表达和说话者身份之间的解开,实现了对音色和情感的独立控制。在零样本设置中,模型可以准确地重建目标音色(来自音色提示),同时完美再现指定的情感音调(来自风格提示)。
为了提高高度情感表达中的语音清晰度,我们结合了GPT潜在表示,并设计了一种新颖的三阶段训练范式,以提高生成语音的稳定性。此外,为了降低情绪控制的门槛,我们通过微调Qwen3设计了一种基于文本描述的软指令机制,有效地引导了具有所需情感取向的语音生成。
最后,在多个数据集上的实验结果表明,IndexTTS2在单词错误率、说话人相似性和情感保真度方面优于最先进的零样本TTS模型。音频示例可在以下位置获得:IndexTTS2 演示页面。
技巧:请联系作者以获取更多详细信息。如需商业使用和合作,请联系 indexspeech@bilibili.com。
手感指数TTS2
IndexTTS2:语音的未来,正在生成

📣 更新
2025/09/08🔥🔥🔥 我们向世界发布 IndexTTS-2!- 首个具有精确合成持续时间控制的自回归TTS模型,支持可控和不可控模式。此功能在此版本中尚未启用。
- 该模型实现了高度表达的情感语音合成,通过多种输入方式实现了情绪控制能力。
2025/05/14🔥🔥 我们发布了 IndexTTS-1.5,显着提高了模型的稳定性和英语性能。2025/03/25🔥 我们发布了带有模型权重和推理代码的 IndexTTS-1.0。2025/02/12🔥 我们向 arXiv 提交了论文,并发布了我们的演示和测试集。
🖥️ 神经网络架构
IndexTTS2 的架构概述,我们最先进的语音模型:
![图片[3]-index-tts 工业级可控高效零样本文字转语音系统-开源码库社区-开源分享-6协议-村兔网](https://github.com/index-tts/index-tts/raw/main/assets/IndexTTS2.png)
IndexTTS2 的主要贡献总结如下:
- 我们提出了一种自回归TTS模型的持续时间适应方案。IndexTTS2 是第一个将精确持续时间控制与自然持续时间生成相结合的自回归零样本 TTS 模型,该方法可扩展于任何自回归大规模 TTS 模型。
- 情感和说话者相关特征与提示解耦,设计了一种特征融合策略,以在情感丰富的表达过程中保持语义流畅性和发音清晰度。此外,还开发了一种情绪控制工具,利用自然语言描述来造福用户。
- 为了解决缺乏高度表达性语音数据的问题,我们提出了一种有效的训练策略,将零样本TTS的情感表达能力显著提升到最先进的(SOTA)水平。
- 我们将公开发布代码和预训练权重,以方便未来的研究和实际应用。
模型下载
| 拥抱脸 | 模型作用域 |
|---|---|
| 😁 索引TTS-2 | 索引TTS-2 |
| 索引TTS-1.5 | 索引TTS-1.5 |
| 索引TTS | 索引TTS |
使用说明
⚙️ 环境设置
- 确保您的系统上同时具有 git 和 git-lfs。
还必须在当前用户帐户上启用 Git-LFS 插件:
git lfs install
- 下载此存储库:
git clone https://github.com/index-tts/index-tts.git && cd index-tts
git lfs pull # download large repository files
- 安装 uv 包管理器。 它是可靠、现代化的安装环境所必需的。
提示
快速简便的安装方法:
有许多方便的方法可以在您的计算机上安装该命令。 请查看上面的链接以查看所有选项。或者,如果你愿意 一种非常快速简便的方法,您可以按如下方式安装它:uv
pip install -U uv
警告
我们只支持安装方法。其他工具,例如 或 ,不保证它们会安装正确的依赖版本。如果您不使用,您几乎肯定会遇到随机错误、错误消息、缺少 GPU 加速和各种其他问题。如果您使用非标准安装,请不要报告任何问题,因为几乎所有此类问题都是无效的。uvcondapipuv
此外,速度比 快 115 倍,这是采用新行业标准的另一个重要理由用于 Python 项目管理。uvpip
- 安装所需的依赖项:
我们用来管理项目的依赖环境。以下命令 将自动创建一个项目目录,然后安装正确的 Python 版本和所有必需的依赖项:uv.venv
uv sync --all-extras
如果下载速度很慢,请尝试使用本地镜像,例如以下任何一个 中国本地镜像(从下面的列表中选择一个镜像):
uv sync --all-extras --default-index "https://mirrors.aliyun.com/pypi/simple"
uv sync --all-extras --default-index "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
提示
可用的额外功能:
--all-extras:自动添加下面列出的所有额外功能。您可以 如果要自定义安装选项,请删除此标志。--extra webui:添加 WebUI 支持(推荐)。--extra deepspeed:添加 DeepSpeed 支持(可能会加快某些推理速度 系统)。
重要
重要提示 (Windows):DeepSpeed 库可能难以安装一些 Windows 用户。您可以通过删除标志来跳过它。如果你想要上述任何其他额外功能,您可以手动添加它们的特定功能标志。--all-extras
重要 (Linux/Windows):如果您在安装过程中看到有关 CUDA 的错误, 请确保您已在系统上安装 NVIDIA 的 CUDA 工具包 12.8 版(或更高版本)。
- 通过紫外线工具下载所需的模型:
下载方式:huggingface-cli
uv tool install "huggingface-hub[cli,hf_xet]"
hf download IndexTeam/IndexTTS-2 --local-dir=checkpoints
或通过以下方式下载:modelscope
uv tool install "modelscope"
modelscope download --model IndexTeam/IndexTTS-2 --local_dir checkpoints
重要
如果上述命令不可用,请仔细阅读输出。它将告诉您如何将工具添加到系统路径中。uv tool
注意
除了以上车型外,一些小型车型也会自动 在项目首次运行时下载。如果您的网络环境 对 HuggingFace 的访问速度慢,建议执行以下作 命令:
export HF_ENDPOINT="https://hf-mirror.com"
🖥️ 检查 PyTorch GPU 加速
如果需要诊断环境以查看检测到哪些 GPU, 您可以使用我们随附的实用程序来检查您的系统:
uv run tools/gpu_check.py
🔥 IndexTTS2 快速入门
🌐 网络演示
uv run webui.py
打开浏览器并访问以查看演示。http://127.0.0.1:7860
您还可以调整设置以启用 FP16 推理等功能(较低 VRAM 使用)、DeepSpeed 加速、编译的 CUDA 内核以提高速度等。都 可以通过以下命令查看可用选项:
uv run webui.py -h
玩得愉快!
重要
使用 FP16(半精度)推理会非常有帮助。它更快 并且使用更少的 VRAM,质量损失非常小。
DeepSpeed 还可以加快某些系统上的推理速度,但它也可以 让它变慢。性能影响在很大程度上取决于您的特定 硬件、驱动程序和作系统。请尝试有和没有它, 发现什么最适合您的个人系统。
最后,请注意,所有命令都会自动激活正确的 每个项目的虚拟环境。不要手动激活任何环境 在运行命令之前,因为这可能会导致依赖冲突!uvuv
📝 在 Python 中使用 IndexTTS2
要运行脚本,您必须使用该命令来确保 代码在您当前的“UV”环境中运行。有时也可能是 有必要将当前目录添加到您的 ,以帮助它找到 IndexTTS 模块。uv run <file.py>PYTHONPATH
通过以下方式运行脚本的示例:uv
PYTHONPATH="$PYTHONPATH:." uv run indextts/infer_v2.py
以下是如何在您自己的脚本中使用 IndexTTS2 的几个示例:
- 使用单个引用音频文件合成新语音(语音克隆):
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "Translate for me, what is a surprise!"
tts.infer(spk_audio_prompt='examples/voice_01.wav', text=text, output_path="gen.wav", verbose=True)
- 使用单独的情感参考音频文件来调节语音合成:
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。"
tts.infer(spk_audio_prompt='examples/voice_07.wav', text=text, output_path="gen.wav", emo_audio_prompt="examples/emo_sad.wav", verbose=True)
- 指定情感参考音频文件时,可以选择将 调整它对输出的影响程度。 有效范围为 ,默认值为 (100%):
emo_alpha0.0 - 1.01.0
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。"
tts.infer(spk_audio_prompt='examples/voice_07.wav', text=text, output_path="gen.wav", emo_audio_prompt="examples/emo_sad.wav", emo_alpha=0.9, verbose=True)
- 也可以省略情感参考音频,而是提供 一个 8 浮点数列表,按以下顺序指定每种情绪的强度: 。 您还可以使用该参数来引入随机性 在推理过程中;默认值为 ,并将其设置为 启用 随机性:
[happy, angry, sad, afraid, disgusted, melancholic, surprised, calm]use_randomFalseTrue
注意
启用随机采样会降低语音的语音克隆保真度 合成。
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "哇塞!这个爆率也太高了!欧皇附体了!"
tts.infer(spk_audio_prompt='examples/voice_10.wav', text=text, output_path="gen.wav", emo_vector=[0, 0, 0, 0, 0, 0, 0.45, 0], use_random=False, verbose=True)
- 或者,您可以启用基于 您提供的脚本。然后,您的文本脚本将自动 被转换为情感向量。 建议在使用文本时使用 0.6 左右(或更低) 情绪模式,使语音听起来更自然。 您可以使用 (默认值: ; 启用随机性):
use_emo_texttextemo_alphause_randomFalseTrue
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "快躲起来!是他要来了!他要来抓我们了!"
tts.infer(spk_audio_prompt='examples/voice_12.wav', text=text, output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, use_random=False, verbose=True)
- 也可以直接提供特定的文本情感描述 通过参数。然后,您的情感文本将自动 转换为情感向量。这使您可以单独控制文本 脚本和文字情感描述:
emo_text
from indextts.infer_v2 import IndexTTS2
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "快躲起来!是他要来了!他要来抓我们了!"
emo_text = "你吓死我了!你是鬼吗?"
tts.infer(spk_audio_prompt='examples/voice_12.wav', text=text, output_path="gen.wav", emo_alpha=0.6, use_emo_text=True, emo_text=emo_text, use_random=False, verbose=True)
提示
拼音用法说明:
IndexTTS2 仍然支持汉字和拼音的混合建模。 当您需要精确的发音控制时,请提供带有特定拼音注释的文本,以激活拼音控制功能。 请注意,拼音控制并不适用于所有可能的辅音-元音组合;仅支持有效的汉语拼音大小写。 有关有效条目的完整列表,请参阅。checkpoints/pinyin.vocab
例:
之前你做DE5很好,所以这一次也DEI3做DE2很好才XING2,如果这次目标完成得不错的话,我们就直接打DI1去银行取钱。
旧版:IndexTTS1 用户指南
您还可以通过导入不同的模块来使用我们以前的 IndexTTS1 模型:
from indextts.infer import IndexTTS
tts = IndexTTS(model_dir="checkpoints",cfg_path="checkpoints/config.yaml")
voice = "examples/voice_07.wav"
text = "大家好,我现在正在bilibili 体验 ai 科技,说实话,来之前我绝对想不到!AI技术已经发展到这样匪夷所思的地步了!比如说,现在正在说话的其实是B站为我现场复刻的数字分身,简直就是平行宇宙的另一个我了。如果大家也想体验更多深入的AIGC功能,可以访问 bilibili studio,相信我,你们也会吃惊的。"
tts.infer(voice, text, 'gen.wav')


没有回复内容