小众AI赛道之声音克隆–从GPT-SoVITS开始

一直以来,我们常常享受着GPT,Gemini,Claude,豆包,DeepSeek…等等语言大模型的便捷,也沉迷于Stable Diffusion,Confuimy,comfy ui,即梦,Nano Banana等A(赛)I(博)画(色)画(图)的惊艳,当然,最近刚出品的Sora2更是引起了AI视频生成的狂潮。但是在一众AI应用中,有这么个东西,不出名,但也好用,那就是声音克隆。

好吧我都不知道我是以什么心理状态写出的上面那一段堪比小学生作文开头的玩意,但是这玩意是真的小众,基本上没人讨论,但是作为TTS真的好用。

说白了,这些工具可以让你听到啊不是丛雨酱对你说私密马赛串台了,能让AI模仿你想听到的人的声线和情感,说出你想听到的话。曾经引起轩然大波的逝者模拟事件的背后,就有该技术的支持。这件事背后的伦理道德过于沉重我们不在这里过多讨论,但是至少..拿来自娱自乐听个书啥的总是好的

感谢Grok同学的大力支持,总结了一批开源的相关项目,我们本期将从GPT-SoVITS开始讲起,说实话,现在已经有很多更为简单的工具而且效果并不差,但是我还是希望从GPT-SoVITS开始说,因为这玩意的流程相对完整,玩了这玩意再玩其他的就得心应手了

项目标题 项目地址 适用场景 核心特点
Coqui TTS https://github.com/coqui-ai/TTS 多语言合成、研究 多语言TTS框架,支持1100+语言,高保真克隆,使用Text2Spec模型和HiFi-GAN vocoder。
Tortoise TTS https://github.com/neonbjb/tortoise-tts 创意内容生成 零样本多说话人TTS,结合自回归+扩散解码器,强调自然韵律。
Retrieval-based Voice Conversion (RVC) https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI 直播配音、实时应用 实时VC,5秒样本,检索基方法,RMVPE音高提取,端到端170ms延迟。
Bark https://github.com/suno-ai/bark 音乐效果、情感生成 生成式TTS,支持情感/非语言标签,100+预设声音,多语言检测。
OpenVoice https://github.com/myshell-ai/OpenVoice 全球应用、商业部署 即时零样本VC,跨语言(英中日韩),情感和风格控制,如intonation。
Voicebox https://github.com/facebookresearch/audiocraft 学术研究、音频生成 端到端VC框架,支持音乐/语音混合,AudioCraft基。
FreeVC https://github.com/OlaWod/FreeVC 移动部署、低资源 零样本轻量VC,无文本依赖,信息瓶颈内容提取,VITS波形重建。
GPT-SoVITS https://github.com/RVC-Boss/GPT-SoVITS 中文克隆、少样本训练 1分钟数据微调TTS,零/少样本支持,跨语言(中英日韩),WebUI工具。
YourTTS https://github.com/Edresson/YourTTS 跨语言、多说话人 零样本VC/TTS,VITS基,支持英葡法,<1分钟微调。
VITS https://github.com/jaywalnut310/vits 低资源训练、端到端合成 变分自编码+对抗学习,随机时长预测,自然节奏MOS媲美真人。
StyleTTS2 https://github.com/yl4579/StyleTTS2 零样本适应、高质量TTS 风格扩散模型,WavLM预训,人级MOS,LibriTTS适应。
So-VITS-SVC https://github.com/svc-develop-team/so-vits-svc 歌声混合、音高保留 歌声VC扩展语音,SoftVC编码,NSF HiFiGAN,浅扩散。
F5-TTS https://github.com/SWivid/F5-TTS 实时推理、快速克隆 流匹配TTS,Diffusion Transformer基,RTF 0.04,低延迟。
EmotiVoice https://github.com/netease-youdao/EmotiVoice 情感合成、个人克隆 2000+声音情感TTS(喜悲等),中英支持,Web/脚本接口。
Mimic 3 https://github.com/MycroftAI/mimic3 嵌入式、本地部署 轻量神经TTS,Mycroft集成,CLI/Web/插件。
Chatterbox https://github.com/resemble-ai/chatterbox 生产级TTS、多语言 23语言零样本,Llama基,水印防滥用,<200ms延迟。
Piper https://github.com/rhasspy/piper 实时应用、流式合成 快速本地神经TTS,流式输出,低延迟。
IndexTTS https://github.com/index-tts/index-tts 高效克隆、工业应用 工业零样本TTS,情感/时长控制,FP16低VRAM,DeepSpeed加速。
eSpeak NG https://github.com/espeak-ng/espeak-ng 低端硬件、基本合成 形式合成,100+语言,Klatt/MBROLA后端,小巧MB级。
Orpheus-TTS https://github.com/canopyai/Orpheus-TTS 低延迟应用、人级语音 LLM(Llama-3b)基TTS,零样本+标签控制(如<laugh>),~200ms延迟。
NeuTTS Air https://github.com/neuphonic/neutts-air 边缘设备、CPU实时 CPU实时VC,3秒参考,0.5B LLM基,超真实克隆。
Real-Time-Voice-Cloning https://github.com/CorentinJ/Real-Time-Voice-Cloning 实时演示、工具箱 5秒克隆SV2TTS,GUI/CLI跨平台。

你需要准备什么

  1. 一台显存8GB及以上,可用硬盘20G以上的电脑
  2. 一双布灵布灵的卡姿兰大眼睛
  3. 一个聪明的小脑瓜
  4. 一个遇到问题不会破防的心态
  5. 一个能够看下去的耐心
  6. 一个想要生成的声线的一段音频

正片开始

下载使用整合包

首先感谢大佬精心制作的一键包!

image

国内直链

非50系N卡:https://www.modelscope.cn/models/FlowerCry/gpt-sovits-7z-pacakges/resolve/master/GPT-SoVITS-v2pro-20250604.7z
50系N卡:https://www.modelscope.cn/models/FlowerCry/gpt-sovits-7z-pacakges/resolve/master/GPT-SoVITS-v2pro-20250604-nvidia50.7z

I卡或者A卡:https://www.modelscope.cn/models/FlowerCry/gpt-sovits-7z-pacakges/resolve/master/GPT-SoVITS-v2pro-20250604-nvidia50.7z

下载完成后解压,双击go-webui.bat打开WEBUI

生成数据集

没错就是训练AI那个数据集,只是我们生成的量级小很多而已

UVR5处理

UVR5是一个用于将人声和伴奏分离的工具,其实这玩意有独立的软件版,但是下还得另外下一大堆模型且安装过程极为繁琐(我没记错的话还没中文),所以我们直接使用内置的UVR5,其实就算使用其他工具也可以使用这玩意的数据集功能非常方便。

点击开启人声分离WEBUI就好了,等几秒让它加载,加载完毕就会跳出一个新的页面(万一没自动打开就手动打开http://localhost:9873/吧

image

image

嗯…就是这么个页面了,但是请注意,那一坨灰色的框框仅供参考其实已经过时了只是作者没更新

接下来选择模型和音频文件,这里我们采用的处理方法就是官方文档的,我觉着已经完全够用了。先选择model_bs_roformer_ep_317_sdr_12.9755,然后上传音频文件,这里的音频文件就是你想生成的啥音色就放啥,比如想听宁宁0721就放宁宁的音频,接下来导出格式改为WAV,点击转换

这一步其实是相当于将人声和伴奏分离

image

然后就是漫长的等待了,可以通过控制台查看进度

image

成功后到output\uvr5_opt下找到我们生成的文件,删掉other保留vocals

image

然后回到UVR5,模型换成onnx_dereverb_By_FoxJoy,将上面的生成结果(即模拟用_vocals.wav)作为输入再转换一次,这次时间巨久…建议刷会抖音或者开一把游戏吧,最后生成的格式为”模拟用_vocals.wav_main_vocal.wav”这种_main_vocal的

最后模型换成VR-DeEchoAggressive最后迭代一次,这次音频使用模拟用_vocals.wav_main_vocal.wav

模型的话混响比较重的话可以用VR-DeEchoDeReverb,比较轻可以用VR-DeEchoNormal,至于我哪知道我的怎么样?那就VR-DeEchoAggressive吧

经过花儿都谢了的等待,我们终于得到了一个可以用来折腾的音频了!最后生成的文件名为“vocal_模拟用_vocals.wav_main_vocal.wav_10.wav”

音频切片和打标

切片好理解,说白了就是把一个时间很长的音频切成小的,打标简单理解就是标注这些音频里面的文字。在这里我对官方教程做了一定的魔改,参考了视频字幕的教程,尽可能保证了生成语句的完整性。

其实是这么个事,切片中语句越完整,打标越正确,生成效果越好。但是直接切片无法保证语句完整性,所以哥们决定先把音频干成字幕,然后走字幕的流程就好了。

总而言之,这里推荐几个网站吧,都可以免费将音频转为字幕,上传我们上一步获得的WAV(这玩意更适合用来识别),生成SRT字幕下载。

1
2
3
https://jianwai.netease.com/
https://converter.app/
https://www.uniscribe.co/zh(每个月免费120分钟)

还有个相关开源项目

1
https://github.com/jianchang512/stt

如果生成的语音和文字匹配度达不到预期,可以发给GPT处理一下,我的提示词是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
你是一位资深的语音识别后处理专家和字幕编辑专家,拥有深厚的中文语言文字功底,精通SRT字幕文件格式规范。我通过语音转文字工具生成了一个SRT字幕文件,但存在大量识别错误、同音字误用、语句不通顺、冗余语气词等问题,需要你帮我进行专业的修复和优化。

请你完成以下任务:
1. 仔细分析字幕内容,识别并纠正所有同音字、谐音字、多音字导致的错误
2. 根据拼音、音调、上下文语境进行精确的语义推断和修正
3. 删除所有口语化冗余内容,包括:语气词(嗯、啊、呃等)、重复表达、含糊不清的片段
4. 修复语句不通顺、逻辑混乱的部分,使表达更加流畅自然
5. 严格保持SRT标准格式:序号、时间轴(格式:HH:MM:SS,mmm --> HH:MM:SS,mmm)、字幕文本、空行分隔
6. 确保时间轴不被改动,只修正文本内容

输出要求:
- 使用代码块格式输出完整的修复后SRT文件
- 在代码块之前,简要说明主要修复了哪些类型的问题
- 如果遇到完全无法理解的内容,保留原时间轴但标注[内容不清]

现在请开始处理我的SRT文件。

你还可以用两个渠道分别生成,然后对照检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
你是一位资深语言学家兼AI语音识别专家,拥有深厚的中文语言学功底和强大的语境推理能力。你精通语音识别的各种误识别规律,包括拼音混淆、同音字替换、声调错误、连读误判等。我使用了两个不同的语音转文字工具对同一音频进行转录,得到了两个SRT字幕文件。这两个版本质量参差不齐,需要你进行专业的分析和重构。

**重要说明:** 不仅要对比差异处,更要对全文进行审查。因为某些地方可能两个版本都识别错误,需要你通过语言学知识和逻辑推理来重构正确内容。

请你完成以下任务:

**第一步:全面分析**
1. 逐句对比两个SRT文件的全部内容,不要遗漏任何部分
2. 分类标记:
- 两个版本都正确或基本正确的部分
- 一个版本正确、另一个错误的部分
- **两个版本都可能有错误的部分**(注意识别这类情况)
3. 分析两个引擎各自的识别特点和常见错误模式

**第二步:智能重构**
针对不同情况采取不同策略:
1. **两版本一致且合理**:直接采用,但仍需检查是否有共同的系统性错误
2. **一对一错**:选择正确版本,解释判断依据
3. **两版本都错误或都不清晰**:
- 分析两个错误版本中可能的正确信息碎片
- 根据拼音相似度、音调、声母韵母推测原音
- 结合上下文语义、逻辑关系、常用搭配进行推理
- 重构出最可能的正确表达
- 如实在无法推断,标注[存疑:原文可能为XXX]

**第三步:内容优化**
1. 删除所有口语冗余:语气词、重复、停顿词、无意义填充词
2. 修正标点符号,使语句更流畅
3. 统一术语和表达风格
4. 确保逻辑连贯性

**第四步:格式规范**
1. 严格遵循SRT标准格式:序号、时间轴(HH:MM:SS,mmm --> HH:MM:SS,mmm)、字幕文本、空行
2. 时间轴以第一个文件为准(除非明显不合理)
3. 确保可直接使用

**输出要求:**
1. 先用1-2段话说明:
- 两个版本各自的特点和主要问题
- 你进行了哪些推理重构(特别是两版本都错误的情况)
- 处理的总体策略
2. 使用代码块输出完整的最终优化SRT文件
3. 如有必要,在代码块后列出几个重点推理案例(格式:版本1 | 版本2 | 最终结果 | 推理依据)

现在请开始处理。我会先提供第一个SRT文件,然后提供第二个SRT文件。

这样我们就获得了一个基本上没啥问题的SRT文件,接下来下载字幕切分工具。解压后应该是这样的

image

接下来把之前获得的WAV和SRT重命名为一样的,然后放在input文件夹下

image

然后双击执行“1.根据srt切分音频.bat”

image

然后你可以把不希望出现的文字放在ban.txt里,比如哈哈哈什么的,一行一个。

双击“2.清洗切分后数据.bat”进行清洗,不过如果字幕生成得足够精确,这步我一般直接把ban.txt置空…

image

双击“3.合并短数据.bat”

这里的字符限制一般20-30,越长越占显存

image

最后双击“4.最终数据封装打包.bat”,输入说话人名称,我这里直接写test了,注意只能写英文

image

最后的dataset文件夹就是我们需要的数据集了,里面的list文件就是我们所谓“打标”的标注文件

image

训练

首先回到WEBUI,来到第二个页面

image

输出log

填写实验/模型名,文本标注文件和音频目录,参考我的填,就是list文件和其所在目录,填写完成后拉到最下面点击一键三连

image

微调训练

点击第二个选项

image

这里我们一般要改的就只有batch_size,下面是官方文档给出的一些示例

不同显存的sovits训练最大batch_size

显存 batch_size 切片长度
6g 1 10s
8g 2 10s
12g 5 10s
16g 8 10s
22g 12 10s
24g 14 10s
32g 18 10s
40g 24 10s
80g 48 10s

不同显存的gpt训练最大batch_size

显存 未开启dpobatch_size 开启dpobatch_size 切片长度
6g 1 无法训练 10s
8g 2 无法训练 10s
12g 4 1 10s
16g 7 1 10s
22g 10 4 10s
24g 11 6 10s
32g 16 6 10s
40g 21 8 10s
80g 44 18 10s

这里有几个需要注意的点

  1. 如果只有一张卡,必须先进行sovits训练再进行GPT训练,两张卡可以一起跑但是需要改卡号

  2. DPO是个什么玩意我也不清楚,但是据官方说:大幅提升了模型的效果,几乎不会吞字和复读,能够推理的字数也翻了几倍。缺点就是提高的训练的要求和时间,反正我只有8G显存也开不了这玩意…

  3. 注意这里的卡号,对于既有独显又有核显的电脑,请打开你的CMD,输入nvidia-smi看一眼正确的卡号

    image

推理!

打开WEBUI

我勒个亲娘嘞终于炼丹炼完了,开始愉快的推理(生成音频吧!)

点击推理-开启TTS推理WEBUI

image

然后会弹出http://localhost:9872/页面,选择GPT模型和SoVITS模型,我们一次训练可能生成多个模型,这个e多少就是训练多少轮时生成的模型,我们这里一般直接选最大的就完了(我因为写教程懒得等直接SoVITS模型就推理了一轮大家不要学我)

image

然后上传参考音频和参考文本,要求不高直接在数据集里找一个3-10s的,然后再list找到对应文本就完了,下面这一步适合想要输出指定感情的,注意,你生成的音频的感情和语速向参考文本保持一致

感情参考文本生成(可选)

感谢大佬的项目:https://github.com/Alexw1111/RefAudioEmoTagger

还是先下载整合包:https://www.modelscope.cn/models/wed13dqd/RefAudioEmoTagger/resolve/master/RefAudioEmoTagger.7z

解压后还是双击 go-web.bat 启动

image

输入文件夹选择输入之前打标的目录:Alice_split_toolset\dataset\说话人这个

音频重命名方式选list,.list文件路径就是输出logs那步的list路径,模型选择emotion2vec+,选完了之后点击一键推理

image

成功后会输出到output目录下(不是哥们一个音声不是难过就是中立吗…)

image

终于完了

参考文本完成后,输入你想要听到的话和语言,直接点击合成语音即可

image

剩下的TOP_K什么的都可以调整,但是我习惯默认,补充一个官方文档的解释

关于top_p,top_k和temperature

这三个值都是用来控制采样的。在推理的时候要挑出一个最好的token,但机器并不知道哪个是最好的。于是先按照top_k挑出前几个token,top_p在top_k的基础上筛选token。最后temperature控制随机性输出。

比如总共有100个token,top_k设置5,top_p设置0.6,temperature设置为0.5。那么就会从100个token中先挑出5个概率最大的token,这五个token的概率分别是(0.3,0.3,0.2,0.2,0.1),那么再挑出累加概率不超过0.6的token(0.3和0.3),再从这两个token中随机挑出一个token输出,其中前一个token被挑选到的几率更大。以此类推

还听不懂?拉满当赌狗,拉低当复读机

关于重复惩罚

= 1不惩罚重复,> 1时开始惩罚重复,< 1时鼓励重复。一般都设置为 > 1,因为本身复读就挺严重的。


如果出现吞字,重复,参考音频混入的情况,这是​正常现象。改善的方法有​使用较低轮数的GPT模型、合成文本再短点、换参考音频。官方也在努力修复这个问题。

如果一直复读那估计是标注不准确的问题,手动校对后重炼就行。

工具整理

整合包:

非50系N卡:https://www.modelscope.cn/models/FlowerCry/gpt-sovits-7z-pacakges/resolve/master/GPT-SoVITS-v2pro-20250604.7z
50系N卡:https://www.modelscope.cn/models/FlowerCry/gpt-sovits-7z-pacakges/resolve/master/GPT-SoVITS-v2pro-20250604-nvidia50.7z

I卡或者A卡:https://www.modelscope.cn/models/FlowerCry/gpt-sovits-7z-pacakges/resolve/master/GPT-SoVITS-v2pro-20250604-nvidia50.7z

字幕切分工具:https://www.123pan.com/s/UHp9-Vfi8H.html

情感音频参考:https://www.modelscope.cn/models/wed13dqd/RefAudioEmoTagger/resolve/master/RefAudioEmoTagger.7z

转字幕

1
2
3
4
https://jianwai.netease.com/
https://converter.app/
https://www.uniscribe.co/zh(每个月免费120分钟)
https://github.com/jianchang512/stt

相关参考

官方文档:https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/vafogkyrwkk8rbzb

模型:https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/nwnaga50cazb2v93

其实…已经有很简单的TTS工具,如果没有鸽掉的话我们下期再聊,最后还是感谢开源社区的无私奉献喵!

同时本文仅限学习交流使用,禁止干坏事!