开源TTS与语音克隆四选一:CosyVoice、F5-TTS、GPT-SoVITS、Fish-Speech实测对比
最近后台收到不少留言都在问同一个问题想做语音克隆和文本转语音TTSCosyVoice、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-SoVITSGPT SoVITS支持中英日韩粤等弱低整合包中文配音、音色复刻CosyVoiceLLM Flow Matching支持中英日韩粤等CosyVoice2支持中可控情感、跨语种、数字人F5-TTSFlow Matching支持英文最稳支持中英文自然语音、批量生成Fish-SpeechVQGAN Transformer支持多语种广泛支持中高服务端部署、多语种应用看完这张表你应该能发现它们不是“谁替代谁”的关系而是不同需求下的不同选择。接下来我详细说说实测效果。2. 音色克隆实测参考音频、相似度与自然度的真实对比选TTS最核心的指标就两个声音像不像说话自然不自然。可惜这两者往往不可兼得。为了公平对比我准备了同一段参考音频尽量用相似的输入文本把四个项目都跑了一遍。下面是我记录的实测结果和一些对结果的判断。2.1 我用的测试方法我先选了一段某男声朗读的新闻口播时长大约30秒没有背景音乐没有混响语速中等。测试文本我分了三类短句“今天天气不错适合出门散步”、长句“根据气象台最新消息明天开始将迎来一轮强降温天气过程请各位市民注意防寒保暖并及时关注临近预报信息”、特殊文本“电话号码138xxxx1234日期2025年3月15日”。这四个项目对参考音频的预处理方式不一样GPT-SoVITS会自己做切片和降噪CosyVoice会从音频里抽取说话人embeddingF5-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 CosyVoiceLoRA微调比全量微调靠谱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-SoVITS4-6 GB8-16 GB12 GB以上RTX 3060 12GBCosyVoice8 GB左右16 GB更高级别RTX 4070 Ti SUPER 16GBF5-TTS4-8 GB16 GB24 GB以上RTX 3090 / 4090Fish-Speech8 GB16-24 GB24 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-SpeechAPI服务和多并发上线要注意的东西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跑一条英文语音两个一对比你立刻就会知道自己更需要什么了。