IndexTTS2 — B站开源的情感可控零样本语音克隆

> 一句话版本:B站(Bilibili)开源的 TTS 模型,给一段 3 秒音频就能克隆声音,还能精确控制情感(8 种情绪)和时长(毫秒级),效果被认为接近 ElevenLabs。20K stars,完全开源可本地部署。

项目信息
来源https://github.com/index-tts/index-tts
创建时间2025-02-06
Stars20,059Forks 2,465
语言Python
开发者Bilibili IndexTeam
训练数据55,000 小时多语言语料(中英日)
发布日期2025-09-08(IndexTTS2)
许可证B站自定义许可证(非标准开源协议,商用有条件)

核心内容

四大核心能力

1. 零样本声音克隆

2. 情感-音色分离控制

- 情绪滑块(最推荐"忧郁"选项,效果最自然)

- 参考音频(给一段带情感的音频)

- 文字描述("用悲伤的语气说")

- 8 维情感向量(专业调参)

3. 精确时长控制(世界首创)

4. 多模态情感输入

竞品对比

特性IndexTTS2MaskGCTF5-TTSElevenLabs
声音克隆⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
情感控制⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
时长控制⭐⭐⭐⭐⭐
本地部署
开源✅ 完全开源
商用付费
价格免费免费免费$5-99/月

快速使用


# 克隆仓库
git clone https://github.com/index-tts/index-tts.git
cd index-tts

# 安装依赖(推荐用 uv)
uv sync --all-extras

# 下载模型
hf download IndexTeam/IndexTTS-2 --local-dir=checkpoints

# 启动 Web UI
uv run webui.py

# Python API
from indextts.infer_v2 import IndexTTS2

tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints")
tts.infer(spk_audio_prompt='voice.wav',
          text="你好,这是IndexTTS2测试",
          output_path="output.wav")

社区评价

商用许可证分析

IndexTTS2 使用的是B站自定义许可证(不是 Apache/MIT 等标准开源协议)。

✅ 允许

⚠️ 限制条件

⚠️ 法律风险

和其他 TTS 许可证对比

模型商用限制
**IndexTTS2**✅ 免费>10亿营收需单独申请,不可转让
**F5-TTS**✅ CC-BY-NC 4.0非商业
**CosyVoice2**✅ Apache 2.0几乎无限制
**Fish Speech**✅ BSD-3几乎无限制
**ElevenLabs**✅ 付费$5-99/月

结论:中小团队和个人基本够用。唯一硬门槛是收入超 10 亿人民币。最大实际风险是声音克隆的肖像权——商用前必须获得被克隆者授权。

Modal 部署可行性分析

结论:完全可行,成本极低。

硬件匹配

需求Modal 可选
CUDA GPU ≥8GB 显存T4 16GB ($0.40/hr) 或 L4 24GB ($0.80/hr)
模型持久存储Modal Volume(类似 S3)
预装依赖Modal Image(自定义 Docker 镜像)

成本估算

操作时间成本
模型加载(首次)10-15 秒$0.002-0.003
生成 10 秒音频5-10 秒$0.001-0.002
**单次调用总计****≈$0.003**(约 2 分钱人民币)
$30 免费额度**≈10,000 次调用**

推荐架构


import modal

volume = modal.Volume.from_name("indextts-models", create=True)

app = modal.App("indextts-clone")

@app.function(
    gpu="L4",
    volumes={"/models": volume},
    timeout=300,
    container_timeout=600
)
def clone_voice(text: str, voice_ref_bytes: bytes) -> bytes:
    from indextts.infer_v2 import IndexTTS2
    tts = IndexTTS2(
        cfg_path="/models/checkpoints/config.yaml",
        model_dir="/models/checkpoints"
    )
    # 写入参考音频 → 生成 → 返回 wav bytes
    ...

# 暴露为 HTTP API
@app.function(gpu="L4", volumes={"/models": volume})
@modal.web_endpoint()
def api(text: str, voice_url: str):
    import requests
    voice_ref = requests.get(voice_url).content
    audio = clone_voice.remote(text, voice_ref)
    return modal.Response(content=audio, media_type="audio/wav")

注意事项

1. 冷启动:首次调用 30-60 秒(下载模型 + 加载 GPU),之后秒级

2. 模型文件:几 GB,用 Volume 持久化避免重复下载

3. 许可证:商用前确认(B站开源,标注 NOASSERTION)

4. 语言:中英文输出最佳,其他语言克隆音色可行但输出质量待验证

分析

为什么 IndexTTS2 重要

不足

与 Jay 的关联

评分

维度评分 (1-10)说明
技术突破9世界首创时长控制,情感-音色分离
音质表现9社区评价接近 ElevenLabs
易用性7需要 GPU + 几 GB 模型,但 API 简单
开放性6开源但许可证不明确
生态720K stars,有 ComfyUI 集成,但文档偏中文
Modal 部署8完全可行,成本低
与 Jay 的关联7播客 + TTS + Modal 组合有用
**总分****7.6**目前开源 TTS 的天花板,情感控制独一档