📌 项目地址index-tts/index-tts | ⭐ 20,825 颗星 | 🔧 Python | 📜 NOASSERTION

仓库现状:论文发了,代码没开

点开 index-tts/index-tts,第一行警告:“仓库历史已重置,请删除本地副本并重新克隆”。翻遍整个仓库,没有模型权重、推理脚本、安装说明。只有一篇论文摘要、一个B站演示视频、几个Demo音频。

20825个star,全是冲着论文效果和Demo质量来的。作者是bilibili团队,官方渠道只有这个GitHub仓库。商业合作邮箱 indexspeech@bilibili.com。

目前能做的事:读论文、听Demo、加社群、等release。

时长控制:给自回归TTS装一个“停止令牌”

自回归TTS逐个token生成,最后一个token出来才知道总时长。视频配音需要人物在特定帧闭嘴,传统方法只能事后拉伸或压缩,失真明显。

IndexTTS2的核心贡献是让自回归模型在生成时就知道什么时候停。论文提出了两种模式,共享同一套权重:

  • 显式模式:告诉模型“生成N个token”,模型强制在第N步停止。N对应的物理时长通过训练时学到的token-duration映射反算。我算了一下,如果平均每个token对应80ms,说“你好”大约需要8个token(0.64秒),你可以指定生成6或10个token来微调速度。
  • 自由模式:不指定数量,像普通自回归一样生成,同时强制复制输入prompt的韵律特征(语速、停顿、重音)。

这个做法与VALL-E、SPEAR-TTS那种事后调整不同,它改变了生成过程本身。关键在训练阶段引入了一个长度预测头,推理时直接约束采样步数。论文声称这个方法是通用的,其他自回归TTS也能套用。

我判断这是个实用创新。视频配音对口型一直靠后期处理,让模型按需生成是从根上解决问题。不过Demo只展示了句级对齐,连续多句的长篇对口型效果未知。

音色与情绪分离:用张三的声音说李四的愤怒

现有的零样本TTS通常只给一条参考音频,音色和情绪是绑定在一起的。你想让张三用愤怒语气说话,但张三的参考音频是平静的,你得去找张三愤怒的样本——很难找,而且质量不一定好。

IndexTTS2把控制信号拆成两个独立prompt:

  • 音色prompt:目标说话人几十秒干净语音,只提取speaker embedding(说话人身份特征)。
  • 风格prompt:任意说话人带情绪的音频,提取pitch、energy等韵律特征。

两路输入在模型内部通过分离损失和对抗分类器解耦。情感分类器只看风格分支的输出,不让它接触音色;说话人分类器只看音色分支的输出。Pitch和能量强制编码到风格分支,说话人向量强制从音色分支提取。

输出结果是:用音色prompt的声线,说出风格prompt的情绪。Demo里“悲伤”和“愤怒”切换,确实能在同一声线下听出语气不同。

不过,有几个问题我没在论文里找到答案:

  • Demo只展示了三四种情绪,同一speaker在“恐惧”“惊喜”之间能否稳定区分?
  • 风格prompt里的情绪必须足够纯粹,混入中性语气会削弱输出情绪强度。用户需要多少秒的干净情绪音频才能达到稳定效果?
  • 如果风格prompt和文本描述的情绪冲突(比如文本说“悲伤”,但风格prompt是欢快的),模型怎么取舍?论文没说。

自然语言描述情绪:调参不如直接说句人话

情绪控制通常用数值参数或分类标签。IndexTTS2用了一种更直接的方式:微调了Qwen3(阿里巴巴开源的大模型),把“用兴奋的语气,语速稍快”这种自然语言描述转成隐式情绪向量,喂给TTS的cross-attention。论文叫它“soft instruction mechanism”,不需要显式情绪标签。

代价是推理时多一次Qwen3推理。单句几十毫秒,文本越复杂延迟越高。批量合成几百句时得算进去。另外自然语言有歧义——不同人对“兴奋”理解不同。论文只用了少量样本微调,等代码放出后我打算试一下描述要多细、是否支持否定句(比如“不要悲伤”)。

三阶段训练:为什么高情绪语音不容易崩

论文写了三阶段训练:

  1. 基础TTS映射:用干净中性语音优化音质,类似普通自回归TTS学习文本到声学token的映射。
  2. 加入时长约束:插入额外长度预测头,训练模型按指定token数生成。这阶段语音仍是中性的。
  3. 情感解耦:引入双prompt输入,用分离损失训练,同时优化音色分离和情绪控制。这阶段才加入带情绪的speech。

论文指出高情绪表达(嘶吼、哭泣、尖叫)时语音清晰度容易下降。三阶段训练逐步增加难度,让模型先学会基本映射和时长控制,再处理情绪变化,避免多个目标同时优化导致不稳定。

不过论文没有公开数据比例、训练步数、GPU型号等细节,也没有消融实验对比一步训练和三阶段的效果差距。我怀疑三阶段并不是唯一方案,可能只是现有条件限制下的工程选择。代码放出后可以做对照实验。

你现在能做什么

读论文:搜“IndexTTS2”能找到预印本,8页不含附录。图2是系统架构,图3是时长控制效果对比。有TTS背景的话3-4小时能读完核心内容。重点看“约束长度预测”和“双分支解耦”。

听Demo:README里的B站视频。重点听情绪切换段和对口型样例——对口型的抖动确实小,比同期其他模型自然。注意观察高情绪段(比如愤怒)有没有明显音质下降。你自己听一下判断。

关注社区:QQ群663272642(4群)、1013410623(5群),Discord https://discord.gg/uT32E7KDmy。官方只通过GitHub仓库发布代码和权重,其他渠道都不是官方。我已经进了QQ群,目前主要是等release通知和讨论论文细节

准备硬件:论文没提具体推理资源,但自回归TTS推理通常需要8-16G显存(取决于序列长度)。未来开源后大概率支持单卡A100或RTX 4090。我猜官方会优先优化推理效率,毕竟bilibili自己有视频配音需求。

我的整体评价

IndexTTS2在时长控制和音色-情绪解耦上提供了两个实用的创新点。特别是时长控制,对口型场景是刚需,而当前开源方案几乎没有原生支持。情绪解耦虽然理念不新鲜,但demo效果确实比同类模型(如Speak-tts、CosyVoice)稳定。

但注意三个风险:

  1. 代码和权重未开源,目前只有论文和demo。论文的可复现性未知。
  2. 高情绪段音质下降是否被三阶段训练完全解决?demo里没有对比,需要自己听。
  3. 中文以外语言表现——论文只说在多数据集上实验,但没提英文/日文效果。bilibili团队大概率优先优化中文。

如果你做视频配音、有声书多角色合成、游戏角色语音等,值得等release再深入集成。届时我会第一时间测试并给出详细性能报告。

这篇文章对你有帮助吗?

发表回复