跳到主要内容

语音合成 / 音色克隆

OpenVoice 本地部署:131MB 的音色转换器,一块入门卡跑通六语种克隆

OpenVoice 是极少数「小到不像这个年代」的声音克隆方案——MIT 授权、纯前馈推理、全部权重加起来不到 350MB。这页把 V1 与 V2 的真实差别、参考音频的硬要求,以及那几个几乎必踩的依赖坑一次讲完。

OpenVoice 由 MIT 的 Qin Zengyi、清华的 Zhao Wenliang 与 Yu Xumin,以及 MyShell 的 Sun Xin 共同发布,论文是 arXiv:2312.01479《OpenVoice: Versatile Instant Voice Cloning》,代码在 github.com/myshell-ai/OpenVoice,3.7 万 star,V1 与 V2 均为 MIT 授权,商用研究都免费。它的架构和后来那批 LLM 式 TTS 完全不同:文本先交给一个基座 TTS 说出来,再由一个独立的「音色转换器」(tone color converter)把这段音频的音色换成参考说话人的。这个拆分决定了它的一切优点和一切局限——转换器是前馈的流式模型,没有自回归 token 逐个吐字的过程,延迟稳定、可预测;但它也只负责音色,口音、情绪、节奏全部由基座决定。

数字上它小得离谱。V2 的转换器 checkpoint.pth 是 131,320,490 字节(约 125MiB),配置里写着 22050Hz 采样率、hop 256、隐藏维 192、6 层、gin_channels 256、HiFi-GAN 上采样 [8,8,2,2],典型的 VITS 血统。V2 的基座换成了 MeloTTS,每个语种一个 fp32 checkpoint,中文那份是 207,770,124 字节,英文 v3 是 207,602,918 字节。也就是说「中文克隆」这条最常见的链路,权重合计约 340MB。仓库 issue #48 里有人实测初始化时占用约 3GiB 内存、约 1GiB 显存。这意味着一件事:给 OpenVoice 租 H100 是纯粹的浪费,真正该问的问题不是「够不够跑」,而是「一张卡能塞几个并发 worker」。

同时也要把话说透:OpenVoice 仓库最后一次代码推送停在 2025 年 4 月 19 日,V2 的权重包仍是 2024 年 4 月发布的 checkpoints_v2_0417.zip,没有 V3。MyShell 的 HuggingFace 组织里,OpenVoiceV2 之后只有 DreamVoice 和 ShellAgent。这条线基本定型了。它带来的最大实际后果是依赖被冻结在 2023 年——requirements.txt 里写着 numpy==1.22.0、librosa==0.9.1、gradio==3.48.0、faster-whisper==0.9.0,官方环境是 Python 3.9,在今天的 NumPy 2.x 环境下装不上是常态。如果你要的是更强的韵律和情感表现,Apache-2.0 的 CosyVoice(2.2 万 star,仍在活跃更新)是另一条路;如果你要的是「便宜、可控、延迟稳定、批量跑几万条」,OpenVoice 到今天依然是性价比最高的选择之一。

01 —

版本与权重:到底要下载哪些文件

V2 不是一个模型,而是 MeloTTS 基座 + 音色转换器 + 音色嵌入三件套

版本参数量显存上下文说明
OpenVoice V2 音色转换器(checkpoints_v2_0417)converter/checkpoint.pth = 131,320,490 B(约 125MiB,fp32)权重常驻约 0.13GB;含 CUDA 上下文与激活实际约 1GB输出 22.05kHz 单声道,zero_g=true,6 层 / 隐藏维 192 / gin 256整条链路的核心,只换音色不改内容,V1 与 V2 的转换器体积几乎一样但权重不同,不要混用
MeloTTS 基座(EN / ES / FR / ZH / JP / KR)每语种约 208MB fp32,中文 207,770,124 B,英文 v3 207,602,918 B单语种权重约 0.21GB;六语种全部常驻约 1.25GB中文基座原生支持中英混读,官方 demo 文本就是「在这次 vacation 中……」V2 的发音、口音、语速、断句全部来自这里,OpenVoice 本身一个字都不负责
V2 源音色嵌入 base_speakers/ses(11 个)每个约 1.7KB 的 .pth,实质是 256 维 gin 向量可忽略en-newest / en-us / en-br / en-au / en-india / en-default / es / fr / zh / jp / kr必须和你选的 MeloTTS speaker_id 对上,选错会让转换结果音色发飘、机械感明显
OpenVoice V1(checkpoints_1226)EN / ZH 基座各 160,467,309 B,转换器 131,327,338 B,HF 仓库合计 452MBissue #48 实测初始化 BaseSpeakerTTS 约 1GiB 显存 + 3GiB 内存原生基座只有英文和中文唯一保留情感风格标签(whispering / cheerful / sad 等)的版本,V2 把这套风格控制拿掉了,需要情绪就得留在 V1
目标音色嵌入 target_sese_extractor.get_se() 的产物,256 维张量可忽略参考音频要求:干净、单人、够长、无长段静音提取一次存成 .pth 反复用,不要每次合成都重跑 VAD 切分,那才是真正的时间开销

02 —

该租哪张卡:按并发数选,不是按显存选

权重不到 350MB,瓶颈从来不是显存容量,而是每个 worker 进程各自的 CUDA 上下文和单卡吞吐

  • 第一次跑通:装环境、下权重、提一个人的音色试合成

    Tesla V100 32GB$0.188/卡·时

    全网最便宜的一档,32GB 对这条链路是碾压性富裕,Volta 又被所有 PyTorch 版本稳定支持,正适合折腾那份 Python 3.9 的老依赖。

  • 日常开发:Gradio 交互调参、反复换参考音频对比效果

    RTX 3090 24GB$0.193/卡·时

    Ampere 架构对新版 CUDA 和 torch 兼容性最省心,价格只比 V100 贵半分钱,改一行代码重启一次进程的开发节奏下最划算。

  • 生产 API:几十路并发实时合成,要低且稳的首包延迟

    RTX 4090 24GB$0.540/卡·时

    转换器是前馈的,单请求算力需求极低,4090 的高频单卡吞吐能把并发数拉满,24GB 足够塞十几个常驻 worker 进程。

  • 六语种全量常驻 + 大批量离线配音流水线

    RTX A6000 48GB$0.817/卡·时

    六个 MeloTTS 基座加转换器权重约 1.38GB,真正吃显存的是每个 worker 各自约 0.3–0.5GB 的 CUDA 上下文,48GB 能把进程数堆到显存不再是限制。

03 —

四步在 NexGPU 上把 OpenVoice V2 跑起来

从空实例到出第一条克隆音频,卡在哪一步的人最多都标出来了

  1. 01

    开实例,建 Python 3.9 环境

    选 NexGPU 的 PyTorch 预置镜像开机,SSH 进去。务必按官方要求建 Python 3.9 环境——requirements.txt 里钉死了 numpy==1.22.0 和 librosa==0.9.1,在 Python 3.11 + NumPy 2.x 上直接编译失败,这是最高频的第一道坎。

    conda create -n openvoice python=3.9 -y && conda activate openvoice && git clone https://github.com/myshell-ai/OpenVoice.git && cd OpenVoice && pip install -e .
  2. 02

    装 MeloTTS,下 V2 权重

    V2 的基座是独立仓库,必须单独装,日文还要额外拉 unidic 词典。权重包 checkpoints_v2_0417.zip 解压出 converter/ 和 base_speakers/ses/ 两个目录。如果 Silero VAD 拉不下来,手动把 zip 放到 ~/.cache/torch/hub/snakers4_silero-vad_master 即可绕过。

    pip install git+https://github.com/myshell-ai/MeloTTS.git && python -m unidic download && wget https://myshell-public-repo-host.s3.amazonaws.com/openvoice/checkpoints_v2_0417.zip && unzip checkpoints_v2_0417.zip
  3. 03

    从参考音频提目标音色

    加载转换器后调用 se_extractor.get_se(),vad=True 会用 Silero 做静音切分。参考音频必须干净、单人、够长、没有大段空白。注意它会把中间产物缓存到 processed/ 目录——换了内容但文件名没变的话,一定要先删掉这个目录,否则你听到的还是上一版。

    target_se, audio_name = se_extractor.get_se('resources/example_reference.mp3', tone_color_converter, vad=True)
  4. 04

    MeloTTS 合成 → 转换器换音色

    先用 MeloTTS 把文本读成 tmp.wav,再把源音色向量(base_speakers/ses 里对应的那个)和目标音色向量一起喂给 convert()。注意 message 参数:官方 demo 默认写 "@MyShell",它会通过 wavmark 在输出里嵌一段水印,自建服务前先想清楚这个参数要不要改。

    tone_color_converter.convert(audio_src_path=src_path, src_se=source_se, tgt_se=target_se, output_path=save_path, message="@MyShell")

算一笔真账:一万条中文配音要花多少钱

第一次跑通选 Tesla V100 32GB($0.188/卡·时):建环境加装 MeloTTS 约 20 分钟,下载 131MB 转换器 + 208MB 中文基座不到 1 分钟,再花半小时提音色试效果,一小时封顶,账单 1 × $0.188 = $0.188。批量阶段换 RTX 4090($0.540/卡·时)。假设一万条平均 12 秒的中文短句,合计 120,000 秒 ≈ 33.3 小时音频;按你自己实测的 8 倍实时算(前馈转换器通常还更快,以你那套依赖为准),需要 33.3 ÷ 8 ≈ 4.17 小时 GPU:4.17 × $0.540 = $2.25。输出是 22.05kHz 16bit 单声道,每秒 44,100 字节,120,000 秒 = 约 5.3GB wav;连同 0.6GB 权重合计 5.9GB,按存储中位价 $0.414/GB·月 是 $2.44/月,把 5.3GB 拉回本地按出网中位价 $0.0081/GB 是 $0.043。算力加出网 = $0.188 + $2.25 + $0.04 ≈ $2.48;跑完当天就把卷销毁,存储那部分几乎不产生费用。计算按秒计费、按小时定价,实例一停算力就停止计费——只有存储会一直算到你销毁它为止,没有起租时长,没有开通费,也不用申请配额。

04 —

常见问题

OpenVoice 本地部署到底需要多大显存?8GB 的卡够不够?

够,而且富裕很多。V2 这条链路的权重是 MeloTTS 单语种约 208MB 加转换器 131MB,合计约 340MB;仓库 issue #48 里社区实测初始化时占用约 1GiB 显存、约 3GiB 系统内存。所以 8GB 卡跑单路完全没问题,真正的选卡逻辑是并发——一张卡上每多起一个 worker 进程,就多一份 0.3–0.5GB 的 CUDA 上下文。在 NexGPU 上,试跑阶段直接开 Tesla V100 32GB($0.188/卡·时)最省,要拉并发再换 RTX 4090($0.540/卡·时),按秒计费,停机即停算力账单。

OpenVoice V2 和 V1 有什么区别?我该用哪个版本?

V2 在 2024 年 4 月发布,权重包是 checkpoints_v2_0417.zip,把基座换成了 MeloTTS,原生支持英语、西班牙语、法语、中文、日语、韩语六种,音质明显更好,而且明确了 MIT 商用授权。但它砍掉了 V1 那套情感风格控制——V1 的英文基座带 whispering、cheerful、sad 等风格标签,V2 没有。所以:要多语种和音质选 V2,要情绪风格标签就得留在 V1,或者自己换一个带情绪的基座。两版权重可以在同一台 NexGPU 实例上并存对比,加起来还不到 1GB,开一张 RTX 3090 24GB($0.193/卡·时)一小时就能把两条链路都试完。

为什么克隆出来的声音口音和语气完全不像参考音频?

这不是 bug,是设计。官方 QA 写得很直白:OpenVoice 只克隆参考说话人的音色(tone color),不克隆口音,也不克隆情绪。口音、语速、情感全部来自基座 TTS——V2 里就是 MeloTTS 那 11 个 speaker 之一。想要英式口音就选 en-br,想要印度英语就选 en-india,想要中英混读就用中文基座;想要真正的情绪迁移,OpenVoice 这套架构做不到,得换模型。想横向比几个基座 speaker 的差别,最快的办法是在 NexGPU 上开一台卡把 base_speakers/ses 里 11 个音色一次性全跑一遍,几分钟的事,账单按秒结算。

OpenVoice 安装老是报 numpy / librosa 错误,Silero VAD 也下不下来,怎么解决?

两个都是老问题。第一个是依赖被冻结了:requirements.txt 钉死 numpy==1.22.0、librosa==0.9.1、gradio==3.48.0、faster-whisper==0.9.0、whisper-timestamped==1.14.2,官方环境是 Python 3.9,你在 Python 3.11 + NumPy 2.x 上装必然崩。老老实实 conda create -n openvoice python=3.9。第二个是 se_extractor 里的 Silero VAD 走 torch.hub 拉 GitHub,网络不通就失败,手动把 zip 解到 ~/.cache/torch/hub/snakers4_silero-vad_master 就好。NexGPU 有 2000+ 预置镜像含 PyTorch,直接在干净镜像里建 3.9 环境比在本机上和系统 Python 打架省事得多,装错了销毁重开就是几分钱的事。

OpenVoice 能商用吗?生成的音频里有水印吗?

授权层面很干净:V1 和 V2 都是 MIT,商用和研究都免费,这是 2024 年 4 月随 V2 一起明确下来的。水印要注意——仓库依赖里有 wavmark==0.0.3,官方 demo_part3 的调用里写着 encode_message = "@MyShell",convert() 会把这段信息嵌进输出音频。自建服务前请先确认这个 message 参数你要传什么。另外真正需要合规审查的从来不是许可证,而是「你有没有权利克隆这个人的声音」,这一层跟模型无关。在 NexGPU 上跑意味着参考音频和产出音频都在你自己的实例里,SSH、Jupyter、REST API、CLI 随你接,不经过任何第三方合成服务。

现在还值得部署 OpenVoice 吗?还是直接上 CosyVoice 这类新模型?

看你要什么。OpenVoice 仓库最后一次代码推送是 2025 年 4 月 19 日,V2 权重还是 2024 年 4 月那份,没有 V3,这条线已经定型。但它的优势也很难被取代:全部权重不到 350MB,纯前馈没有自回归,延迟稳定可预测,MIT 授权,单卡能堆的并发数极高——批量跑几万条离线配音的场景,成本比 LLM 式 TTS 低一个量级。反过来,要更自然的韵律和情感,Apache-2.0 的 CosyVoice(2.2 万 star,仍在活跃更新)显然更强,但也重得多。最理性的做法是两个都实测一遍:NexGPU 有 1,175 个已验证可租节点、75 种 GPU 型号,OpenVoice 开一张 $0.188 的 V100,CosyVoice 开一张 A100 PCIE 80GB($0.824/卡·时),同一天内跑完对比,账单按秒结算,不用最低消费。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。