曲奇的技术笔记

文章

4GB 笔记本上的配音选型:GPT-SoVITS 与 IndexTTS

在 RTX 3050(4GB)上同时做游戏日文对白和中文 UP 主口播时,我们把两条引擎拆开用:GPT-SoVITS 负责「演准」,IndexTTS(尤其 v1.5)负责「量产」。下面按选型、项目分工、心得和决策表整理,方便直接对照。

一、先看结论

GPT-SoVITSIndexTTS
最不擅长4GB 上连续批量(易 OOM)、短梗词乱语种日语梗原汁原味、强情绪细控(v1.5)
我们的默认游戏日文句、需要「像某个 CV」的中文跨语种UP 主口播整段、轻量重跑

一句话:要角色、要跨语种、要参考音精细控 → GPT-SoVITS;要中文解说量产、要省显存 → IndexTTS v1.5。

二、各自在项目里干什么

GPT-SoVITS:游戏日文 + 中文「定调」

在 lunwen 里,日文轨走同语种推理:旁白用 yuki、角色用 ema / hiro / meruru 等包。情绪不靠括号标签,靠三件套:

  1. 参考音频(4~8 秒干声,情绪接近)
  2. 参考文本(与参考音一字不差)
  3. emo_tag → speed / top_k / temperature 等参数表

在 oc 里,丛雨(Murasame)做中文跨语种:日语参考 + 中文正文,或中文锚点 + 中文正文。咖啡豆解说的「音色锚点」就是这样定下来的——开场一句定全片气质。

IndexTTS:中文口播的轻量主线

IndexTTS 吃的是「参考 wav + 中文正文」。我们用 GPT-SoVITS 定稿的中文句当 audio_prompt,做中→中克隆,比日→中跨语种更稳、更像「同一个人在讲」。

咖啡豆、Cursor 双池口播,默认都走 v1.5:约 2.3GB 显存、几秒一条,同进程批量也不容易炸。

三、选型对照(按场景)

场景更合适原因
游戏角色日文对白GPT-SoVITS角色包 + emo 参数成熟
中文 UP 主解说(长文案)IndexTTS v1.5快、稳、中文自然
要「像丛雨」的中文跨语种GPT-SoVITS权重与参考链路现成
短梗(Ciallo / チアロ)看目标日语感 → GSV 日参考;要贴旁白音色 → IndexTTS + 谐音
强情绪、难关句IndexTTS2 或 GSV 换参考重抽v2 更重更慢;GSV 换参考往往更划算
3050 整版重跑IndexTTS v1.5,或 GSV 逐条新进程同进程连跑 GSV 易 OOM

四、GPT-SoVITS 心得

1. 引擎只吃三样东西

参考音、参考文本、推理参数。

停连秒数、退麦、引号换声线——写进「配音指导」可以给真人用,喂给 AI 等于白写。AI 侧只维护 manifest:正文、speed、合并 / 拆段例外。

2. 锚点比参数更致命

中文解说里,v002 起若以 v001 为参考,重跑 v001 = 整片音色重洗。我们踩过:整版默认重合成开场,后面全糊一层。

正确做法:

  • 开场定稿后冻结到 skill/refs,不要用可被覆盖的 output 分轨当锚点
  • 整版重跑默认跳过 v001;只有刻意换开场才 -IncludeV001 并写回冻结文件
  • prompt 与参考音必须一字不差

3. 参考音有硬门槛

社区 / 整合包常见要求参考大约 3~10 秒。1 秒梗音(如 cia.wav)直接喂会报错,需要垫静音或换引擎。IndexTTS 对短参考更宽容。

4. 3050 上的生存法则

  • FP16、限制分配器、少碰「共享 GPU 内存」当常态方案
  • 一条一进程批量,比同进程连跑稳
  • parallel_infer: false、batch_size: 1
  • aux 参考全片统一(我们用 yuki_a),乱换容易「贴话筒」突变

5. 长句与拆段

超长句可能异常拉长(曾出现应十几秒却四十多秒)。对策:按冒号 / 句号拆段推理再拼接,段间留很短静音;拆段间隔可配置,别靠堆标点。

语种也要对:罗马字 Ciallo 容易走英文前端;日梗用片假名 チアロ~ 更干净。

6. 后处理是「成片感」的一半

高通、中频清晰、削齿音、压缩、loudnorm——同一条 raw,后期差一档听感就差一档。参数可以冻结进 preset,避免每次手调。

五、IndexTTS 心得

1. v1.5 与 v2:先分场景

v1.5v2
显存(约)~2.3GB加载就接近 4GB,推理易挤共享显存
速度约数秒 / 条情绪路径可到几十秒 / 条
用途陈述旁白、批量口播情绪关键句(真需要时)

3050 上:日常默认 v1.5。v2 要改懒加载情感模块、必要时把大模型放 CPU,否则很容易 OOM。

2. 参考音质量决定上限

用「已经听着顺耳的中文成品」当 prompt,比用日语参考硬跨语种,口播统一感好很多。我们的习惯是:GSV 定一版开场 → 冻结 → IndexTTS 整片克隆。

3. 想「快、上扬」别砍生成长度

曾为了加快,把 max_mel_tokens 压得很低,结果后面音节没发完就停。

正确顺序是:

  1. 让模型把字说完(token 上限够用)
  2. 再用 atempo / 轻微提 pitch 做「快、亮、上扬」

另外,当前环境下 length_penalty 可能被 transformers 忽略,别当加速开关。

4. 中文谐音是「音色统一」的妥协

梗词若必须贴旁白音色,用「切啊咯」这类谐音,IndexTTS 能读稳;但那是汉字节奏,不是棚機式日语拖腔。要梗感,仍优先日语正文 + 合适参考。

5. 环境坑(装一次就记住)

  • 钉 transformers==4.52.1(太新 / 太旧都会炸)
  • 用 Windows 原生 Python 3.12 venv,别用 msys2、也别指望 GSV 自带 3.9 runtime 装 IndexTTS
  • 国内下模型:ModelScope 往往比 HuggingFace 直连靠谱

六、产线怎么搭更省事

两边最后都收敛成同一套文档习惯:

文案
 → 配音指导(给人:提词器、听检)
 → manifest(给引擎:id / 正文 / 例外)
 → 合成脚本 JOBS 与表同步
 → 分轨听检
 → 段间 gap 拼整轨(或游戏内挂 voice + 更新时长表)

段间停顿不要等距。 问句后多留一点、换题再松一点、包袱落地再松一点、收尾几乎不留——听感会像聊天,而不是念稿机。

听检只抓三条就够:

  1. 像跟人说话,不像课文
  2. 专名咬字清楚(模型名、价格、产品词)
  3. 无长静音尾、无尾音截断

不满意:改 speed / 换参考 / 重抽;不要在正文里堆省略号「演戏」。

七、一张决策表(可直接贴墙上)

你想要的做
整片中文解说,3050 今晚要出片IndexTTS v1.5 + 定稿中文参考
要固定「这个人」的跨语种中文GPT-SoVITS + 冻结锚点,勿乱重跑开场
游戏多角色日文GPT-SoVITS + 角色包 + emo_tag 表
短梗又要像旁白IndexTTS + 谐音试听网格
短梗又要像原梗日语GPT-SoVITS,text_lang=ja,正文用假名
批量重跑IndexTTS 可同进程;GSV 必须逐条进程
听着闷、糊、贴麦先查锚点是否被换、aux 是否乱换、后期 EQ,再谈调参

八、还没完美解决的

  • IndexTTS v1.5 的「演戏感」仍弱于精挑参考的 GPT-SoVITS
  • 谐音梗无法等价还原日语元音与拖腔
  • 4GB 上 IndexTTS2 始终是「能用但别当默认」
  • 自动选参考音(按情绪检索)还没产品化,目前仍靠人工冻结 + 试听网格

这些不妨碍出片,但决定了:默认管线要保守,难关句才上重武器。

九、收束

GPT-SoVITS 像「配音棚」:参考、角色、跨语种、参数表,适合把声音演准。
IndexTTS(尤其 v1.5)像「口播流水线」:中文稳、显存省,适合把解说量产。

我们真正赚到时间的,不是又调高了哪个 temperature,而是三件事:

  1. 锚点冻结,避免一次误重跑毁掉整片
  2. 文档分层,别让 AI 去读只有人用得上的导演备注
  3. 按显存选引擎,3050 上默认走轻的,难关再上重的

如果你也在 4GB 笔记本上做中文解说 + 偶尔角色声:先用 IndexTTS v1.5 跑通整轨,再用 GPT-SoVITS 定一两句「音色锚点」——这条路径,我们反复验证过,最省心。


文中路径与脚本以 oc / lunwen 当前产线为准;硬件结论针对 RTX 3050 4GB,更大显存可放宽「逐条进程」「禁用 v2 默认」等约束。