F5-TTS 与 CosyVoice 2 实战对比:开源声音克隆怎么选


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 走的是另一条路,更像现在主流的"语音版大语言模型"。

它的流程是三段式:

  1. 文本 → 语义 token:用一个 LLM(基于 Qwen2.5-0.5B)把文本转成离散语音 token
  2. 语义 token → mel 频谱:用块感知因果流匹配(chunk-aware causal flow matching)转成声学特征
  3. 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 还是 CosyVoice 2,欢迎在评论区聊聊你踩过的坑、做出的效果,我会一一回复。选型上有纠结也可以问,我尽量给建议。