最近后台收到不少留言,都在问同一个问题:想做语音克隆和文本转语音(TTS),CosyVoice、F5-TTS、GPT-SoVITS、Fish-Speech这四个开源项目到底该装哪个?说实话,这四个名字放在一起确实很劝退新人,因为它们都号称支持“少样本克隆”,但实际用起来,从模型架构到部署方式完全是四个路子。我之前也纠结了挺久,前后把四个项目都跑了一遍,又各自做了不同场景的测试,踩了不少坑,今天就把这份对比整理成文字版,给还在选型的同学一个参考。
先说明白,这篇不是官方文档翻译,也不是看论文就写出来的纸上谈兵,而是我实际下载、部署、训练、推理之后得出的结论。里面有测试数据、有翻车记录、也有我自己的选型建议。如果你正在这四个项目之间犹豫,或者已经从Piper这类轻量TTS转过来正发愁中文发音不标准,这篇文章应该能帮你少走不少弯路。
1. 先看底牌:四个项目的模型架构与定位差异
这四个项目虽然都叫TTS,但底层思路完全不同。一句话概括:GPT-SoVITS是把音色和内容分离的“双阶段工程派”,CosyVoice是生成式大模型的“可控派”,F5-TTS是Flow Matching的“极简派”,Fish-Speech是面向生产环境的“工程派”。理解这个底层差异,再看它们的效果和坑,一切就说得通了。
1.1 GPT-SoVITS:把“音色”拆成语义和声学两段的成熟方案
GPT-SoVITS的思路很直接:先用一个GPT模型根据文本预测“语义Token序列”,再用一个SoVITS模型结合参考音频的声纹特征,把这些语义Token变成可听的声学特征。听起来复杂,但好处也非常明显——音色和内容被完全解耦了。只要你有一段干净的目标人声音频作为参考,哪怕是5秒到1分钟,它就能提取出一个相对稳定的声纹向量,所以“零样本克隆”对它来说是基本操作,不需要先跑什么训练流程。
它也是最接地气的项目之一,作者很早就提供了整合包,下载解压就能跑,社区里的中文教程一抓一大把。很多人第一次玩声音克隆,都是从这里入门的。不过它的短板在于:GPT部分对长文本的注意力很容易发散,生成特别长的句子时会突然“嘴瓢”或者吞字;情绪控制也比较弱,同一个参考音频说出来的语气基本是固定的,想让它“开心一点”“难过一点”很难。
1.2 CosyVoice:把韵律和情感做成了显式控制
CosyVoice是阿里通义实验室开源的生成式TTS,核心是LLM加Flow Matching的组合。它最大的特色是“可控性”:可以通过文字指令控制情感、语速、语气,比如在文本里加“开心地”“轻声说”这样的描述,输出就会有对应变化。CosyVoice2还支持流式合成,想接实时语音对话会方便很多。
它的定位就是“通用语音生成模型”,不是单纯为了音色克隆而存在的。默认基座里带了多个说话人,你可以在不提供参考音频的情况下直接合成语音,也可以给一段参考音频做零样本克隆。不过它的音色相似度在某些情况下不如GPT-SoVITS来得“像”,更适合那种“我要一个自然、稳定、不带明显机械感”的声音。
1.3 F5-TTS:用Flow Matching省掉“音素对齐”的极简派
F5-TTS是目前极简路线的代表。传统的TTS流水线基本是:文本 → 音素 → 时长模型 → 声学模型 → 声码器,中间每一环都会引入误差。F5-TTS直接扔掉传统的音素对齐模块,用一个Flow Matching模型从噪声逐步还原出最终的语音特征,整个过程被压缩成了一个统一的生成式模型。
这个设计的直接结果是:链路简单了,生成出来的语音整体自然度非常高,尤其是英文长句,断句和重音都比较像真人。代价则是:它对参考音频和文本转录质量更加敏感,中文场景如果不做微调,偶尔会出现调调和口型不匹配的情况。我在测试时发现,它默认的英式发音和语调节奏明显比其他项目自然,所以英文需求可以直接考虑它。
1.4 Fish-Speech:开源生态里迭代最快的通用语音模型
Fish-Speech出自Fish Audio团队,走的是VQGAN加Transformer的路线,本质上是一个“通用语音语言模型”。它的多语言支持非常强,中文、英文、日文、德文、法文都能跑,而且不需要为每种语言单独准备复杂的音素系统。最新的Fish-Speech 1.5版本还加入了类似ControlNet的结构,可以通过参考音频控制韵律和情感,灵活度非常高。
它给我的感觉是最接近“商业产品”的开源TTS:自带训练脚本、数据清洗工具,还有本地HTTP服务,支持流式输出,接口风格接近OpenAI的格式。如果你要部署到服务端给多个应用并发调用,Fish-Speech是这四个里面工程化程度最高的一个。
1.5 一张表把四个项目摆在一起看
| 项目 | 底层方案 | 零样本克隆 | 多语言 | 流式输出 | 上手难度 | 适合场景 |
|---|---|---|---|---|---|---|
| GPT-SoVITS | GPT + SoVITS | 支持 | 中英日韩粤等 | 弱 | 低(整合包) | 中文配音、音色复刻 |
| CosyVoice | LLM + Flow Matching | 支持 | 中英日韩粤等 | CosyVoice2支持 | 中 | 可控情感、跨语种、数字人 |
| F5-TTS | Flow Matching | 支持 | 英文最稳 | 支持 | 中 | 英文自然语音、批量生成 |
| Fish-Speech | VQGAN + Transformer | 支持 | 多语种广泛 | 支持 | 中高 | 服务端部署、多语种应用 |
看完这张表你应该能发现,它们不是“谁替代谁”的关系,而是不同需求下的不同选择。接下来我详细说说实测效果。
2. 音色克隆实测:参考音频、相似度与自然度的真实对比
选TTS最核心的指标就两个:声音像不像,说话自然不自然。可惜这两者往往不可兼得。为了公平对比,我准备了同一段参考音频,尽量用相似的输入文本,把四个项目都跑了一遍。下面是我记录的实测结果和一些对结果的判断。
2.1 我用的测试方法
我先选了一段某男声朗读的新闻口播,时长大约30秒,没有背景音乐,没有混响,语速中等。测试文本我分了三类:短句“今天天气不错,适合出门散步”、长句“根据气象台最新消息,明天开始将迎来一轮强降温天气过程,请各位市民注意防寒保暖,并及时关注临近预报信息”、特殊文本“电话号码138xxxx1234,日期2025年3月15日”。
这四个项目对参考音频的预处理方式不一样,GPT-SoVITS会自己做切片和降噪,CosyVoice会从音频里抽取说话人embedding,F5-TTS需要你把参考音频按句切好,Fish-Speech也类似。为了减少变量,我统一使用30秒干净人声,没有额外做切割,让各项目自己的预处理去处理。模型推理全部在单张RTX 4090上完成,避免性能差异影响结果。
2.2 中文短句:GPT-SoVITS和CosyVoice打得有来有回
在“今天天气不错,适合出门散步”这个句子上,GPT-SoVITS的音色相似度明显更高,特别是尾音和气息感,和参考音频几乎是一个调调,但断句有点机械,重音不够自然。CosyVoice则相反,音色和原声有七八成像,但语气松弛很多,听起来更像一个正常人在说话。
必须说明的是,CosyVoice对“音色比较特别”的参考人有时会翻车。我测试的这位男声偏浑厚,CosyVoice克隆出来的声音偏“广播腔”,丢失了一部分颗粒感;而GPT-SoVITS在相同条件下保留得更好。如果你的核心诉求是“让听众一听就知道是这个人”,中文短句场景我仍然会把票投给GPT-SoVITS。
2.3 长句和数字日期:F5-TTS的稳定性超过预期
长句是很多TTS模型的照妖镜。GPT-SoVITS在长句上最容易出事,我跑了三次,有一次在“防寒保暖”后面直接停顿了1秒多,然后像赶时间一样把后半句读完,明显是注意力崩了。CosyVoice长句整体稳定,只有一处语气词处理得稍显生硬。Fish-Speech对长句处理得也很稳,但会有一点“AI朗读腔”。
F5-TTS是这轮的黑马。长句中几乎没有吞字和重复,数字日期也能顺畅读完,这在未做任何微调的默认模型里很难得。不过需要提醒的是,这是英文语料训练偏多的模型,中文长句如果遇到人名地名,偶尔会“半中半英”地念出来,概率不高但确实存在。
2.4 跨语种与情绪表达:CosyVoice和Fish-Speech明显领先
跨语种测试我试了“你好,Welcome to our company,我们的产品已经通过ISO认证”这种中英夹杂的文本。GPT-SoVITS在这种场景下英文部分的发音有点“中文腔”,像是用拼音硬读的。F5-TTS的中英切换反而比较顺滑,但遇到“ISO”这类缩略词时偶尔会逐字母读,节奏略受影响。
CosyVoice对跨语种的支撑是有设计过的,中文和英文之间切换自然,而且它支持在文本里加入情感指令,比如“(开心地)欢迎光临”“(低声)注意保密”,输出确实会有相应情绪变化。Fish-Speech在跨语种上同样强,并且通过参考音频的韵律控制可以做到“用一个人的音色说不同语言”,做成语音翻译产品会非常合适,也就是常说的ASR到MT再到TTS三段式管线,前端接一个翻译模块,后面就能直接说外语了。
2.5 参考音频怎么选,直接决定成败
这一小节我必须单独拿出来讲,因为四个项目我都试过同一段音频的不同版本,结果差距巨大。首先,参考音频一定不能有背景音乐和明显的混响,哪怕是GPT-SoVITS这种号称能降噪的模型,在BGM里提取出来的声纹也会被污染。其次,参考时长不是越长越好,F5-TTS用一段5到15秒的清晰音频,效果往往好过一段60秒但中间有停顿和呼吸声的音频。
还有一个很容易忽略的点:参考音频的情绪要和目标文本接近。你用一段很兴奋的综艺片段做参考,然后让它播报新闻,出来的声音会显得“过度亢奋”;反之,用低沉念白做参考,让它读促销文案也十分别扭。建议准备至少两份参考音频,一份中性播报、一份自然聊天,按需切换。
3. 训练与微调的门槛:显存、数据量和翻车点全记录
很多教程只说怎么跑零样本推理,却避开了“如果你想复刻某个特定声音,或者提升稳定度”该怎么办。现在我根据自己的训练经历,把这四个项目在微调和训练上的差别讲清楚。
3.1 GPT-SoVITS:上手最友好,微调反而容易翻车
GPT-SoVITS的零样本已经足够好用,但不少人想让它更稳定,于是去跑微调。微调前需要准备一小段长音频并配合准确文本,官方WebUI里自带数据集工具,可以自动切片标注。但不知道你有没有这种体验:微调之后,音色“更像”了,但语气变得更僵,甚至出现之前没有的电流音或呼吸声,这就是过拟合了。我试过用不到5分钟的音频微调,Epoch跑8次之后就开始复读,最后只保留第4次的结果才稍微正常。
我的建议是:除非参考音频特别长、特别干净,否则先用零样本,把精力花在挑参考音频上;如果要微调,一定要控制Epoch数量,并且用至少十来个样本的验证集反复听,不要只看Loss曲线。
3.2 CosyVoice:LoRA微调比全量微调靠谱
CosyVoice默认的零样本效果已经很能打,但如果想让它在音色上更贴近目标声音,通常推荐做LoRA微调而不是全量微调。LoRA只训练一小部分参数,16GB显存就能跑,而且训练时间短,不容易把原有模型能力“冲掉”。我在微调时用了一个1分钟左右的单人语音,数据量不大,但跑完后明显感觉对特定音色的还原度上了一个台阶。
CosyVoice的数据处理有一点麻烦:它需要把音频裁剪成合适的长度,并且注册到对应数据集里,路径不能有中文,否则训练脚本会报编码错误。第一次训练我因为忘了给音频做响度归一化,出来的声音忽大忽小,后来全部统一通过ffmpeg归一化到-16 LUFS才算稳定下来。
3.3 F5-TTS:预训练模型够用,微调数据集要精不要多
F5-TTS给我最大的感受是“数据质量比数据量重要”。它训练脚本对文本和音频的配对要求高,音频里如果有多余停顿或者转写文本多字漏字,生成效果会立刻降档。我做了两次尝试,第一次喂了20分钟转写不太准确的音频,效果几乎没有提升;第二次只挑出8分钟最干净的片段,转写逐句核对,效果就有了肉眼可见的改善。
中文场景下,记得做文本规范化,把数字、日期、英文缩略词都先展开成中文读法,否则模型会按英文方式硬读。很多说“F5-TTS中文不行”的反馈,其实大半是数据准备出了问题。
3.4 Fish-Speech:脚本最工程化,但也最容易忽略数据质量
Fish-Speech的训练和数据处理脚本是这四个里最完善的,基本能自动完成VAD切割、转写、格式化,你只需要把原始音频放到指定目录,跑一条命令。但它对显存的胃口也不小,全量训练建议24GB以上,LoRA稍微好点,16GB勉强够。我朋友用一张3090跑过1.5版本的微调,Batch Size调到2才能不爆显存,多轮训练还是有点煎熬。
它最坑的一个点是:自动转写会“自作主张”。如果原始音频里有人声以外的噪音,转写文本里可能会多出一堆奇怪的字,你不检查就直接训练,出来的模型会在句子里夹杂莫名其妙的停顿。所以无论脚本多自动化,我仍然会手动拉一遍转写文本再训练。
3.5 算力需求清单与我的建议配置
| 项目 | 零样本推理显存 | LoRA/微调显存 | 全量训练显存 | 我的推荐起步卡 |
|---|---|---|---|---|
| GPT-SoVITS | 4-6 GB | 8-16 GB | 12 GB以上 | RTX 3060 12GB |
| CosyVoice | 8 GB左右 | 16 GB | 更高级别 | RTX 4070 Ti SUPER 16GB |
| F5-TTS | 4-8 GB | 16 GB | 24 GB以上 | RTX 3090 / 4090 |
| Fish-Speech | 8 GB | 16-24 GB | 24 GB以上 | RTX 3090 / 4090 |
如果你还没有独显,只是想零样本玩一玩,建议直接用云GPU按小时租,先跑通流程再决定是否买卡。别像我一开始那样,为了跑一个项目冲动下单,最后发现其实自己的需求用CPU跑老项目都够。
4. 部署与集成:WebUI、API、流式输出和依赖地狱
测试和训练是一回事,真正把TTS接进自己的产品,又是另一回事。这一章汇总一下我在部署这四个项目时遇到的实际问题和解决办法。
4.1 四种方式:WebUI、命令行、HTTP接口、Python封装
- GPT-SoVITS最常用的是WebUI整合包,开箱即用,适合学习和制作单条音频。
- CosyVoice通常用Python脚本调用,官方示例里有完整的推理流程,可以封装成函数。
- F5-TTS推荐命令行推理,也提供了Gradio界面,批量生成时写个脚本循环调用最方便。
- Fish-Speech自带本地HTTP服务,支持流式输出,适合对接数字人、客服等在线应用。
4.2 GPT-SoVITS整合包:方便是方便,但坑都在“看不见的依赖”里
整合包确实是我见过最省心的分发方式,解压就能跑。但它锁死了Python版本和依赖库,一旦你想在自己项目里二次集成,就会遇到大量“模块找不到”“CUDA runtime不匹配”的问题。我遇到过最离谱的一次是:同样的代码在整合包里能跑,换到conda环境里就报libcudnn版本过低,折腾了整整两天。
我的解法是:不要迷信整合包,自己用conda建一个Python 3.10环境,按官方requirements安装核心依赖。只把整合包当作快速体验工具,生产集成永远用自己的干净环境。另外,如果系统里已经装了ffmpeg/ffprobe,记得把路径写对,否则音频切片阶段会一直卡在“等待上传”。
4.3 CosyVoice:流式输出是要认真读文档的部分
CosyVoice2的一个卖点是流式合成,但默认示例代码并不会自动走到流式模式。你需要手动把推理逻辑改成流式调用,并处理返回的chunk。我第一版接入时没注意到这个问题,直接把整段文本丢进去,延迟高得没法看,后来改成按句切分并逐句流式返回,体验才像那么回事。
还有一点,CosyVoice官方示例里有HuggingFace和ModelScope两个下载源,如果你在国内没有配代理,默认会卡在下载阶段。建议直接在ModelScope上下载模型并指定本地路径,少很多网络问题。这里顺便提一句,有人会问“千问TTS语音引擎怎么用”,千问和CosyVoice同出通义实验室,但两者不是同一个产品,想用开源自建的还是看CosyVoice更合适。
4.4 F5-TTS:导出ONNX后性能提升有限
F5-TTS如果你要追求更快的推理速度,可以尝试导出ONNX模型,但我的实际体验是:它没有带来想象中的性能提升,反而因为ONNX runtime对一些操作支持不完整,导致生成结果有轻微抖动,音质还不如PyTorch原版。
所以我建议,除非你的场景强制要求ONNX格式,否则直接用原版PyTorch加半精度推理就够了。4090上生成一句10秒语音基本在1秒到2秒之间,完全够用。做批量生产时,更要注意的是同时运行多个任务时的显存竞争,最好在代码里加一个队列,控制并发数。
4.5 Fish-Speech:API服务和多并发上线要注意的东西
Fish-Speech的本地服务很有“商业产品”的样子,默认支持HTTP请求,参数格式也接近OpenAI的语音接口风格。但要上线多并发时,你会很快发现GPU显存不够用。每个并发请求都会占用独立的模型副本,如果没有做队列和复用,显存直接翻倍增长。
我的做法是:在Fish-Speech服务前面再加一层任务队列,控制同时推理的请求数不超过2个,超过的请求排队等待,保证服务不因OOM崩掉。移动端集成时,不少人在Flutter里写TTS功能,这时不要直接让App请求模型服务器,而是统一走一个网关层,用WebSocket或短轮询拿到音频数据再播。
4.6 依赖地狱实录与我的“解套”经验
这几个项目里,依赖管理最脆弱的其实是F5-TTS。它的requirements里有一堆版本敏感包,换一个PyTorch小版本就可能出现算子不兼容。CosyVoice则跟我本地的CUDA 12.4环境发生过冲突,后来又改回CUDA 11.8才跑通。
现在我养成的习惯是:每个TTS项目单独用conda虚拟环境,环境里只装必要依赖,绝不全局升级包。跑训练前先备份一份conda-pack快照,出了问题三分钟回滚。硬件驱动方面,NVIDIA驱动版本不要乱升级,保持和CUDA toolkit一致,能少很多玄学错误。说实在的,这些坑不是某一个项目独有的,而是自建TTS服务必须面对的日常。
5. 按需求选型:配音、数字人、出海和批量生产怎么选
前面的对比听下来,你可能更乱了。没关系,这一章直接按使用场景给出结论。
5.1 自媒体配音与有声内容:GPT-SoVITS仍然是首选
如果你要做抖音解说、B站口播、有声书这类的栗子,最强的诉求是:中文发音稳、音色和参考像、本地一键出音频。GPT-SoVITS在这四个里门槛最低,社区教程最多,出了问题百度一下基本都有答案。把长文本提前用脚本按50到100字切分,再批量喂给它,能有效避开长句口胡的问题。选一台有12GB显存的卡,做日常自媒体配音完全够用。
必须提醒的是,用语音克隆做自媒体时,如果克隆的是真人声音,无论如何都要先获得本人授权,并且不要在标题里暗示“这是某明星/某主播配音”。我身边已经有人因为这个问题收到过平台警告,这不是技术问题,而是基本合规问题。
5.2 实时交互与数字人:CosyVoice和Fish-Speech优势明显
数字人直播、语音助手这类场景,流式输出是第一需求。CosyVoice2在这方面的设计最完整,中文自然度也高,配合指令控制情感,体验上非常像真人客服。Fish-Speech胜在接口工程化程度高,前端接入方便,多语言能力也适合面向海外用户的产品。
我试过用GPT-SoVITS做实时对话,效果非常勉强:推理速度不算慢,但流式输出很难做,每次都要等整句生成完才能播放,交互感很差。如果项目对“边说边出字”有要求,GPT-SoVITS可以直接排除。
5.3 出海与多语种朗读:F5-TTS加Fish-Speech的组合
英文内容生成我首推F5-TTS,它对自然重音和语调的把握明显超出其他几个项目,适合做英文播客、课程配音。如果面对的语种更杂,比如日文、德语、西语,那就得上Fish-Speech,它对多语种的支持是模型层面就设计好的,而不只是把中文音素表硬翻译成外文。
做跨语种语音翻译产品时,常规链路是“ASR收进中文 → 机器翻译成英文 → TTS输出英文语音”,这就是所谓的ASR到MT再到TTS三段式。在这条链路里,TTS环节我建议用CosyVoice或Fish-Speech,因为它们对多语种混合文本的容错更高,不容易出现中文音素硬读外文的情况。
5.4 离线批量生产:F5-TTS的稳定性和GPT-SoVITS的生态
离线批量生产指的是“给定一批文本,一天生成几百条音频”的场景。这里最影响效率的不是单条音质的细微差异,而是稳定性和并发控制。F5-TTS因为有统一的Flow Matching模型,长文本生成出错率低,跑批量任务很省心;GPT-SoVITS虽然需要额外切句,但它社区里的批处理脚本和辅助工具最多,熟悉之后也能稳定运行。
我自己的批处理策略是:先用脚本把长文本按标点切成短句,再用并发数为2的队列逐条推理,最后用ffmpeg按句拼接并做响度统一。直接丢整篇长文本,不管哪个项目都会偶尔抽风,切句是成本最低、效果最明显的改进手段。
5.5 版权与合规:用别人的声音之前,先想清楚
这一条放在最后,但份量很重。语音克隆技术本身是中性的,但用不好很容易踩到红线。参考音频如果是别人的声音,请务必拿到明确授权;大段合成时如果是真实人物的声纹,也要意识到它可能带来虚假信息风险。我自己的做法是:项目里的示例音频只用自己录的素材,商业项目绝不碰未经授权的有声书主播、演员、公众人物声音。
这四个项目的开源协议和模型授权也不完全相同,商用前要具体看各自的许可证,不能只看代码标了MIT就以为模型可以随便商用。尤其是导出到第三方平台或产品里,我建议把许可证文件一并保留,避免后续法律纠纷。
最后再分享一点我个人的体会:四个项目没有必要全都装,也没必要追求“最强者”。我现在的固定组合是——中文配音用GPT-SoVITS,中文需要情感控制时用CosyVoice,英文内容用F5-TTS,服务端多语种应用用Fish-Speech。每个项目都有自己最舒服的生态位,你只需要想清楚自己手里有什么样数据和硬件,再决定从哪里开始。如果你还在犹豫,我建议最快的方式是:先花半小时装一个GPT-SoVITS整合包跑一条中文语音,再花半小时装F5-TTS跑一条英文语音,两个一对比,你立刻就会知道自己更需要什么了。