小众AI赛道之声音克隆--从GPT-SoVITS开始
小众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跨平台。 |
你需要准备什么
- 一台显存8GB及以上,可用硬盘20G以上的电脑
- 一双布灵布灵的卡姿兰大眼睛
- 一个聪明的小脑瓜
- 一个遇到问题不会破防的心态
- 一个能够看下去的耐心
- 一个想要生成的声线的一段音频
正片开始
下载使用整合包
首先感谢大佬精心制作的一键包!
国内直链
非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
下载完成后解压,双击go-webui.bat打开WEBUI
生成数据集
没错就是训练AI那个数据集,只是我们生成的量级小很多而已
UVR5处理
UVR5是一个用于将人声和伴奏分离的工具,其实这玩意有独立的软件版,但是下还得另外下一大堆模型且安装过程极为繁琐(我没记错的话还没中文),所以我们直接使用内置的UVR5,其实就算使用其他工具也可以使用这玩意的数据集功能非常方便。
点击开启人声分离WEBUI就好了,等几秒让它加载,加载完毕就会跳出一个新的页面(万一没自动打开就手动打开http://localhost:9873/吧
嗯…就是这么个页面了,但是请注意,那一坨灰色的框框仅供参考其实已经过时了只是作者没更新
接下来选择模型和音频文件,这里我们采用的处理方法就是官方文档的,我觉着已经完全够用了。先选择model_bs_roformer_ep_317_sdr_12.9755,然后上传音频文件,这里的音频文件就是你想生成的啥音色就放啥,比如想听宁宁0721就放宁宁的音频,接下来导出格式改为WAV,点击转换
这一步其实是相当于将人声和伴奏分离
然后就是漫长的等待了,可以通过控制台查看进度
成功后到output\uvr5_opt下找到我们生成的文件,删掉other保留vocals
然后回到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 | https://jianwai.netease.com/ |
还有个相关开源项目
1 | https://github.com/jianchang512/stt |
如果生成的语音和文字匹配度达不到预期,可以发给GPT处理一下,我的提示词是这样的
1 | 你是一位资深的语音识别后处理专家和字幕编辑专家,拥有深厚的中文语言文字功底,精通SRT字幕文件格式规范。我通过语音转文字工具生成了一个SRT字幕文件,但存在大量识别错误、同音字误用、语句不通顺、冗余语气词等问题,需要你帮我进行专业的修复和优化。 |
你还可以用两个渠道分别生成,然后对照检查
1 | 你是一位资深语言学家兼AI语音识别专家,拥有深厚的中文语言学功底和强大的语境推理能力。你精通语音识别的各种误识别规律,包括拼音混淆、同音字替换、声调错误、连读误判等。我使用了两个不同的语音转文字工具对同一音频进行转录,得到了两个SRT字幕文件。这两个版本质量参差不齐,需要你进行专业的分析和重构。 |
这样我们就获得了一个基本上没啥问题的SRT文件,接下来下载字幕切分工具。解压后应该是这样的
接下来把之前获得的WAV和SRT重命名为一样的,然后放在input文件夹下
然后双击执行“1.根据srt切分音频.bat”
然后你可以把不希望出现的文字放在ban.txt里,比如哈哈哈什么的,一行一个。
双击“2.清洗切分后数据.bat”进行清洗,不过如果字幕生成得足够精确,这步我一般直接把ban.txt置空…
双击“3.合并短数据.bat”
这里的字符限制一般20-30,越长越占显存
最后双击“4.最终数据封装打包.bat”,输入说话人名称,我这里直接写test了,注意只能写英文
最后的dataset文件夹就是我们需要的数据集了,里面的list文件就是我们所谓“打标”的标注文件
训练
首先回到WEBUI,来到第二个页面
输出log
填写实验/模型名,文本标注文件和音频目录,参考我的填,就是list文件和其所在目录,填写完成后拉到最下面点击一键三连
微调训练
点击第二个选项
这里我们一般要改的就只有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 |
这里有几个需要注意的点
如果只有一张卡,必须先进行sovits训练再进行GPT训练,两张卡可以一起跑但是需要改卡号
DPO是个什么玩意我也不清楚,但是据官方说:大幅提升了模型的效果,几乎不会吞字和复读,能够推理的字数也翻了几倍。缺点就是提高的训练的要求和时间,反正我只有8G显存也开不了这玩意…
注意这里的卡号,对于既有独显又有核显的电脑,请打开你的CMD,输入
nvidia-smi
看一眼正确的卡号
推理!
打开WEBUI
我勒个亲娘嘞终于炼丹炼完了,开始愉快的推理(生成音频吧!)
点击推理-开启TTS推理WEBUI
然后上传参考音频和参考文本,要求不高直接在数据集里找一个3-10s的,然后再list找到对应文本就完了,下面这一步适合想要输出指定感情的,注意,你生成的音频的感情和语速向参考文本保持一致
感情参考文本生成(可选)
感谢大佬的项目:https://github.com/Alexw1111/RefAudioEmoTagger
还是先下载整合包:https://www.modelscope.cn/models/wed13dqd/RefAudioEmoTagger/resolve/master/RefAudioEmoTagger.7z
解压后还是双击 go-web.bat 启动
输入文件夹选择输入之前打标的目录:Alice_split_toolset\dataset\说话人这个
音频重命名方式选list,.list文件路径就是输出logs那步的list路径,模型选择emotion2vec+,选完了之后点击一键推理
成功后会输出到output目录下(不是哥们一个音声不是难过就是中立吗…)
终于完了
参考文本完成后,输入你想要听到的话和语言,直接点击合成语音即可
剩下的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
字幕切分工具:https://www.123pan.com/s/UHp9-Vfi8H.html
情感音频参考:https://www.modelscope.cn/models/wed13dqd/RefAudioEmoTagger/resolve/master/RefAudioEmoTagger.7z
转字幕
1 | https://jianwai.netease.com/ |
相关参考
官方文档:https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/vafogkyrwkk8rbzb
模型:https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/nwnaga50cazb2v93
其实…已经有很简单的TTS工具,如果没有鸽掉的话我们下期再聊,最后还是感谢开源社区的无私奉献喵!
同时本文仅限学习交流使用,禁止干坏事!