title: "F5-TTS 与 CosyVoice 2 实战对比:开源声音克隆怎么选"
tags:
- F5-TTS
- CosyVoice2
- 声音克隆
- 语音合成
- 人工智能
categories: - 人工智能
description: "实测对比两款开源声音克隆模型 F5-TTS 和 CosyVoice 2,从技术原理、安装部署、克隆效果到本地性能,给出 Mac M 芯片下的真实使用数据和选型建议。"
F5-TTS 与 CosyVoice 2 实战对比:开源声音克隆怎么选
导读:两款 2024 年底爆火的开源 TTS 模型,我都在 M1 Pro 上跑过。本文不讲论文里的花活,只说我实测下来的真实差异------哪个轻、哪个自然、哪个在 Mac 上好跑、什么场景该用哪个。
一、为什么是这两个模型
2024 年下半年,开源 TTS 圈子像开了挂。GPT-SoVITS 还在卷社区,F5-TTS 凭着 DiT + Flow Matching 的架构横空出世,CosyVoice 2 紧跟着阿里通义的牌子把 MOS 分刷到了 5.53。我那阵子正想做视频旁白配音,想用自己声音克隆,于是两个都上手跑了一遍。
先说结论:轻量、本地、要快选 F5-TTS;要最自然的中文效果、能上 GPU 选 CosyVoice 2。 下面是我整理的对比。
| 维度 | F5-TTS | CosyVoice 2 |
|---|---|---|
| 出品方 | 上海交大/西湖大学 | 阿里通义实验室 |
| 架构 | DiT + Flow Matching(纯非自回归) | LLM + FSQ + 流匹配(自回归 + 流式) |
| 参数量 | 约 330M | 0.5B |
| 模型体积 | ~1.5GB | ~3GB |
| 参考音频时长 | 3-15 秒 | 3-10 秒 |
| 支持语言 | 中、英 | 中、英、日、韩 + 18 种方言(v3 扩到 9 语种) |
| 首包延迟 | 较高(CPU 跑明显) | 150ms(流式) |
| Mac M 芯片 | ✅ 友好 | ⚠️ 偏重 |
| 情感控制 | 弱 | 强(9 种情感 + 标签) |
二、技术原理:两个完全不同的思路
F5-TTS:极简的扩散路线
F5-TTS 的全名是 "Fairytaler that Fakes Fluent and Faithful speech with Flow matching",名字长但思路特别干净。
它干了一件挺激进的事------把传统 TTS 的三大件全扔了:没有时长模型、没有文本编码器、没有音素对齐。文本直接用填充 token 补到和语音一样长,然后让扩散模型自己学着从噪声里"雕"出目标语音。
核心三件套:
- ConvNeXt:先把文本表示做细化,让它和语音对得齐
- Flow Matching:从噪声出发,一步步去噪生成语音
- Sway Sampling:推理时的采样策略,能显著提速
训练数据是公开的 10 万小时多语言语料。论文里的推理 RTF(实时因子)能做到 0.15,也就是说生成 1 秒语音只要 0.15 秒------当然这是 GPU 上的数,CPU 上慢得多。
CosyVoice 2:LLM 范式的语音生成
CosyVoice 2 走的是另一条路,更像现在主流的"语音版大语言模型"。
它的流程是三段式:
- 文本 → 语义 token:用一个 LLM(基于 Qwen2.5-0.5B)把文本转成离散语音 token
- 语义 token → mel 频谱:用块感知因果流匹配(chunk-aware causal flow matching)转成声学特征
- mel → 波形:HiFi-GAN 声码器出音频
它做了几个有意思的工程取舍:
- 用 FSQ(有限标量量化) 替代了 VQ,码本利用率拉到接近 100%
- 流式和非流式统一建模,一个模型既能离线合成也能流式出声,首包延迟 150ms
- 直接拿预训练 LLM 当骨干,语义理解能力比从零训的强
一句话总结区别
F5-TTS 像"极简主义"------架构干净、好部署、好理解;CosyVoice 2 像"全家桶"------功能多、效果顶,但更复杂。
三、F5-TTS:本地部署实战
这部分是我实际在 Apple Silicon Mac 上跑通的全流程。
环境要求
- Apple Silicon Mac(M1/M2/M3)
- conda(miniconda 即可)
- Python 3.11(⚠️ 系统自带的 3.14 太新,ML 库不支持)
- 大约 5GB 磁盘(模型 + 缓存)
安装步骤
bash
# 1. 创建 conda 环境
conda create -n voice-clone python=3.11 -y
conda activate voice-clone
# 2. 安装 PyTorch(Mac 上用 MPS 后端)
pip install torch torchaudio
# 3. 安装 F5-TTS
pip install f5-tts
# 4. 安装 Whisper,用来给参考音频转写文字
pip install openai-whisper
录制参考音频
要点:
- 安静环境,没有背景音乐
- 自然语速,咬字清晰
- 格式 wav,时长 控制在 15 秒以内(F5-TTS 的硬限制)
- 录的内容跟最终要合成的文案可以完全无关
如果录音太长,用 ffmpeg 裁一下:
bash
# 裁到 14 秒,单声道,24kHz 采样率
ffmpeg -y -i input.wav -t 14 -ar 24000 -ac 1 ref_audio.wav
用 Whisper 转写参考音频
F5-TTS 需要知道参考音频里说了什么,所以要先转写出对应文字:
python
import whisper
model = whisper.load_model('small')
result = model.transcribe('ref_audio.wav', language='zh')
print(result['text'])
把打印出来的文字记下来,下一步要用。
克隆合成
我写了个 clone_voice.py,把几个坑都处理掉了:
python
import os
import multiprocessing
# 必须设这个,否则 macOS 上会报 PYTHONHASHSEED 错误
os.environ["PYTHONHASHSEED"] = "0"
try:
multiprocessing.set_start_method("fork", force=True)
except RuntimeError:
pass
if __name__ == "__main__":
import sys
ref_audio = sys.argv[1] # 参考音频路径
ref_text = sys.argv[2] # 参考音频对应文字
gen_text = sys.argv[3] # 要合成的文案
output_wav = sys.argv[4] # 输出路径
from f5_tts.api import F5TTS
f5tts = F5TTS()
f5tts.infer(
ref_file=ref_audio,
ref_text=ref_text,
gen_text=gen_text,
file_wave=output_wav,
nfe_step=32, # 去噪步数,32 是默认值
)
运行:
bash
python clone_voice.py \
ref_audio.wav \
"这是参考音频里说的话" \
"这是你想让克隆声音说出的目标文案" \
output.wav
首次运行会自动下载模型(F5-TTS 约 1.5GB + Vocos 声码器),缓存在 ~/.cache/huggingface/。
M1 Pro 上的实际性能
我在 M1 Pro 16GB 上用 CPU 跑,32 步去噪:
| 文案长度 | 耗时 |
|---|---|
| 短句(~20 字) | 约 40 秒 |
| 中文长文案(~80 字) | 约 1.5 分钟 |
⚠️ 这个速度对实时交互肯定不够用,但做离线配音完全 OK。如果手头有 NVIDIA GPU,速度会快十几倍。
四、CosyVoice 2:部署与使用
CosyVoice 2 比 F5-TTS 重不少,但效果也确实更顶。
环境要求
- Linux 或 WSL(Mac 支持但不推荐,太慢)
- NVIDIA GPU(建议 8GB+ 显存)
- Python 3.8-3.12
- 大约 10GB 磁盘
安装步骤
bash
# 1. 克隆仓库
git clone https://github.com/FunAudioLLM/CosyVoice.git
cd CosyVoice
# 2. 创建环境
conda create -n cosyvoice python=3.10 -y
conda activate cosyvoice
# 3. 安装依赖
pip install -r requirements.txt
# 4. 安装本体
pip install -e .
模型权重从 ModelScope 或 HuggingFace 拉:
bash
# 用 ModelScope(国内更快)
pip install modelscope
python -c "
from modelscope import snapshot_download
snapshot_download('iic/CosyVoice2-0.5B', local_dir='pretrained_models/CosyVoice2-0.5B')
"
克隆合成
python
from cosyvoice.cli.cosyvoice import CosyVoice2
from cosyvoice.utils.file_utils import load_wav
# 加载模型
model = CosyVoice2('pretrained_models/CosyVoice2-0.5B')
# 加载参考音频
prompt_speech = load_wav('ref_audio.wav', 16000)
# 零样本克隆
for chunk in model.inference_zero_shot(
'这是要合成的目标文案',
'这是参考音频里说的话',
prompt_speech,
stream=False
):
# 每个 chunk 是一段 mel 频谱 + token
print(chunk['tts_text'])
CosyVoice 2 的杀手锏
跑起来之后你会发现,相比 F5-TTS 它多出几个特别有用的能力:
1. 情感控制
可以在文本里直接插标签:
python
# 用指令控制情感
model.inference_zero_shot(
'今天太开心了,终于搞定了!',
'参考文字',
prompt_speech,
stream=False,
instruct_text='用开心的语气说'
)
2. 流式合成
首包 150ms 出来,后面边生成边播,做实时对话完全不卡。
3. 跨语种克隆
给一段中文参考音,让它说英文,音色能保持一致。F5-TTS 也能做,但 CosyVoice 2 跨语种稳定性明显更好。
五、实测对比:谁更适合你的场景
我把同一段参考音喂给两个模型,合成同一段中文文案,主观感受如下:
| 维度 | F5-TTS | CosyVoice 2 |
|---|---|---|
| 音色相似度 | ⭐⭐⭐⭐ 很像 | ⭐⭐⭐⭐⭐ 非常像 |
| 中文自然度 | ⭐⭐⭐⭐ 流畅 | ⭐⭐⭐⭐⭐ 接近真人 |
| 韵律节奏 | 略平 | 起伏自然 |
| 多音字/绕口令 | 偶有翻车 | 几乎不翻车 |
| 长文案稳定性 | 还行 | 更稳 |
| Mac 本地速度 | 能跑 | 太慢 |
💡 我的判断:如果你只是做短视频旁白、有声书这种离线内容,F5-TTS 性价比最高;如果你要做客服机器人、实时对话这种要低延迟和强控制的场景,CosyVoice 2 是更好的选择。
六、怎么选:按场景给建议
我给几个典型场景的推荐:
场景 1:个人开发者,Mac 上做视频配音
→ 选 F5-TTS。轻、好装、中文够用,离线跑等几分钟没关系。
场景 2:公司做语音助手/客服
→ 选 CosyVoice 2。150ms 延迟、情感控制、流式合成,这些是刚需。
场景 3:要做多语言内容
→ 选 CosyVoice 2。方言和多语种支持完胜。
场景 4:想自己微调训练专属音色
→ F5-TTS 目前不支持微调,CosyVoice 2 支持 fine-tune。所以选 CosyVoice 2。
场景 5:就想要最自然的效果,不在乎资源
→ CosyVoice 2 的 MOS 分 5.53,已经接近商业系统。
七、F5-TTS 踩坑记录
这部分是我实际用 F5-TTS 踩过的坑,记录一下省得大家再趟一遍。
坑 1:PYTHONHASHSEED 致命错误
Fatal Python error: config_init_hash_seed: PYTHONHASHSEED must be "random" or an integer
原因 :F5-TTS 内部会调 seed_everything() 把 PYTHONHASHSEED 设成 0,但 macOS 默认用 spawn 启动子进程,环境变量丢了就报错。
解决:脚本开头加这一段:
python
import multiprocessing
multiprocessing.set_start_method("fork", force=True)
这个坑我在上面的 clone_voice.py 里已经处理好了。
坑 2:参考音频超过 12 秒
F5-TTS 会自己裁剪,但裁的位置不可控,容易把关键内容裁掉。建议主动用 ffmpeg 裁到 14 秒以内,自己掌控裁哪段。
坑 3:转写文字必须准
参考音频的文字转写如果错了,克隆出来的音色会"跑偏"。别图省事用很小的 Whisper 模型,至少用 small,复杂内容上 medium。
八、常见问题
Q:F5-TTS 能做实时合成吗?
CPU 上不行,速度差太多。GPU 上 RTF 能到 0.15,理论上够实时,但 F5-TTS 本身不是为流式设计的,要做实时还得自己改。
Q:CosyVoice 2 在 Mac 上能跑吗?
能跑,但很慢,体验不好。官方推荐 Linux + NVIDIA GPU。Mac 用户还是建议用 F5-TTS。
Q:两个模型能商用吗?
F5-TTS 是 CC-BY-NC-4.0 协议,非商用免费,商用要单独授权 。CosyVoice 2 是 Apache 2.0,商用友好。这点阿里做得很大气。
Q:需要多少参考音频?
两个都是 3-10 秒就够。我个人经验是 8-12 秒效果最稳,太短音色抓不准,太长没必要。
Q:和 ElevenLabs 比怎么样?
ElevenLabs 中文效果已经不错,但它是付费 API,按字符收费。如果对数据隐私敏感或者量大,本地跑 F5-TTS/CosyVoice 2 更划算。
九、速查表
F5-TTS 关键参数
| 参数 | 说明 | 推荐值 |
|---|---|---|
nfe_step |
去噪步数 | 32(默认),想要更快可降到 16 |
cfg_strength |
CFG 强度 | 2.0(默认) |
| 参考音频时长 | 上限 | < 15 秒 |
| 采样率 | 推荐 | 24000 Hz |
CosyVoice 2 关键能力
| 能力 | 说明 |
|---|---|
| 零样本克隆 | 3 秒参考音即可 |
| 流式合成 | 首包 150ms |
| 情感控制 | 9 种情感 + 自定义指令 |
| 跨语种 | 中英日韩 + 方言 |
| 微调训练 | 支持目标说话人 fine-tune |
参考链接
- F5-TTS GitHub:https://github.com/SWivid/F5-TTS
- F5-TTS 论文 Demo:https://f5-tts.github.io/
- F5-TTS HuggingFace 模型:https://huggingface.co/SWivid/F5-TTS
- CosyVoice GitHub:https://github.com/FunAudioLLM/CosyVoice
- CosyVoice 2 Demo:https://fun-audio-llm.github.io/cosyvoice2/
- CosyVoice 2 ModelScope:https://www.modelscope.cn/models/iic/CosyVoice2-0.5B
写了这么多,如果对你有帮助的话,给我点个赞 👍 收个藏 📌 吧~
如果你也在折腾声音克隆,不管是 F5-TTS 还是 CosyVoice 2,欢迎在评论区聊聊你踩过的坑、做出的效果,我会一一回复。选型上有纠结也可以问,我尽量给建议。