OpenVoice 即时语音克隆完整指南:用 5 秒参考音频三步跑通本地声音复刻
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
手里只有一段 5 秒的人声录音,却想让 TA"开口"朗读任意文本,商业平台要么收费要么不开放接口。OpenVoice 是 MIT 与 MyShell 开源的即时语音克隆工具:从短参考音频提取音色,让该音色说出英文、中文乃至多语言文本,且采用 MIT 许可证可免费商用。
📌 项目速览
OpenVoice 做的事:输入一段参考音频加一段文字,输出"用参考人的音色读这段文字"的语音。它把能力拆成三块——音色克隆(准确复制参考音色)、风格控制(情感、口音、节奏、停顿、语调可独立调节)、零样本跨语言克隆(参考音频和生成文本的语言都无需出现在训练集里)。
适合谁:想在自己项目里接入语音克隆的开发者和研究者。仓库直接提供了三个可运行的 Notebook(demo_part1.ipynb 风格控制、demo_part2.ipynb 跨语言、demo_part3.ipynb V2 多语言)和一个本地 Gradio 网页。官方在 docs/QA.md 里明确说它是"技术而非产品":多数参考音频下效果不错,但不保证每种声音都完美,不适合拿来直接给终端用户当成品用。
不适合什么:如果你想要"上传音频就出成品、零代码"的完整应用,它不是;它交付的是模型和流水线,工程化(稳定性、兜底逻辑)需要自己补。
🚀 完整跑通:从零到生成第一条克隆语音
第 1 步:搭环境
按官方 docs/USAGE.md 的 Linux 安装流程,4 条命令装完依赖:
conda create -n openvoice python=3.9 conda activate openvoice git clone https://gitcode.com/GitHub_Trending/op/OpenVoice cd OpenVoice pip install -e .装成功的标志是pip install -e .正常结束(依赖版本在 setup.py 中写死,如 numpy 1.22.0、gradio 3.48.0)。若报版本冲突,多半是 conda 环境里已有新版 numpy,删掉重建成 Python 3.9 环境即可。
第 2 步:放模型文件
V1 需要把官方 checkpoint 压缩包(下载地址见 docs/USAGE.md)解压到仓库根目录的checkpoints文件夹,形成checkpoints/base_speakers/EN、checkpoints/base_speakers/ZH、checkpoints/converter三个子目录。漏掉任何一项,后面加载模型都会直接报FileNotFoundError,先确认目录结构再跑代码。
第 3 步:跑最小示例
下面这段脚本完成初始化并从参考音频提取目标音色(仓库自带 resources/example_reference.mp3 可直接用):
import torch from openvoice import se_extractor from openvoice.api import BaseSpeakerTTS, ToneColorConverter device = 'cuda:0' if torch.cuda.is_available() else 'cpu' base_speaker_tts = BaseSpeakerTTS('checkpoints/base_speakers/EN/config.json', device=device) base_speaker_tts.load_ckpt('checkpoints/base_speakers/EN/checkpoint.pth') tone_color_converter = ToneColorConverter('checkpoints/converter/config.json', device=device) tone_color_converter.load_ckpt('checkpoints/converter/checkpoint.pth') source_se = torch.load('checkpoints/base_speakers/EN/en_default_se.pth').to(device) target_se, _ = se_extractor.get_se('resources/example_reference.mp3', tone_color_converter, vad=True)接着两步生成克隆语音:先让基础 TTS 出"底稿",再交给转换器换音色:
base_speaker_tts.tts("This audio is generated by OpenVoice.", 'outputs/tmp.wav', speaker='default', language='English', speed=1.0) tone_color_converter.convert( audio_src_path='outputs/tmp.wav', src_se=source_se, tgt_se=target_se, output_path='outputs/output.wav', message='@MyShell')效果验证
播放outputs/output.wav:音色应当与resources/example_reference.mp3中的人声一致,但内容和语速由你给的文本决定。想更省事的话,也可以直接起一个本地网页演示(自动识别中/英文,文本限 200 字符):
python -m openvoice_app --share浏览器打开生成的地址,粘贴文本、上传参考音频、点 Send,即可在线试听(入口代码见 openvoice/openvoice_app.py)。
🔍 为什么克隆出来的声音"像但不全是":音色与风格是两套模型
OpenVoice 最有辨识度的设计是把"音色"和"怎么说"拆开:BaseSpeakerTTS负责把文字变成语音,管情感、口音、节奏;ToneColorConverter只干一件事——把底稿里的音色换成参考人的音色。类比成修图:前者是底片,后者是把"人脸"换掉、但保留构图和光线的工具。
这样做的好处很实际:想换语言或换口音时不用碰克隆模型,换一个对应语言的基础说话人模型即可(仓库自带 EN/ZH 两套,其他语言接任意 TTS 当底稿都行,demo_part2.ipynb 用 OpenAI TTS 当底稿做了 11 种语言的演示)。转换器内部用 IPA(国际音标)对齐特征做音色迁移,保证换掉音色的同时,韵律、停顿这些"非音色信息"原样保留。
| 对比维度 | 端到端 TTS 声音克隆 | OpenVoice 分离式方案 |
|---|---|---|
| 换语言/换口音 | 换模型或重新训练 | 只替换基础说话人模型 |
| 情感、节奏控制 | 与音色耦合,难单独调 | 由基础模型参数独立控制 |
| 使用门槛 | 需针对说话人训练 | 预训练转换器直接用,5 秒音频起步 |
| 参考音频要求 | 通常需数分钟 | 数秒到十几秒即可 |
🛠️ 进阶玩法
换情感说话
风格由tts的speaker参数控制,英文基础模型可选friendly、cheerful、excited、sad、angry、terrified、shouting、whispering。注意切到非 default 风格时,source_se要换成对应的en_style_se.pth,否则音色转换会失准:
base_speaker_tts.tts("This audio is generated by OpenVoice.", 'outputs/tmp.wav', speaker='whispering', language='English', speed=0.9) source_se = torch.load('checkpoints/base_speakers/EN/en_style_se.pth').to(device)speed参数同样在这一步生效(0.9 变慢、1.2 变快),而convert里的tau(默认 0.3)控制音色转换强度,数值越大向参考音色靠得越紧。另外convert默认会用 wavmark 往音频里嵌入message指定的不可听水印,部署公开服务时建议保留,也可以给ToneColorConverter(..., enable_watermark=False)关掉。
V2 版本:六种语言原生支持
V2 音质更好且原生支持英、西、法、中、日、韩六种语言(官方说明见 README)。checkpoint 解压到checkpoints_v2,并按 docs/USAGE.md 装好 MeloTTS 后即可把 MeloTTS 各语言模型当基础说话人,完整写法见 demo_part3.ipynb,核心就是"生成底稿 + 换音色"两步:
from melo.api import TTS model = TTS(language='ZH', device=device) speaker_id = model.hps.data.spk2id['ZH'] model.tts_to_file("你好,这是一个 OpenVoice V2 示例。", speaker_id, 'outputs/tmp.wav') source_se = torch.load('checkpoints_v2/base_speakers/ses/zh.pth', map_location=device) tone_color_converter.convert(audio_src_path='outputs/tmp.wav', src_se=source_se, tgt_se=target_se, output_path='outputs/v2_zh.wav')source_se不用自己提取,V2 已按说话人预先算好,存放在checkpoints_v2/base_speakers/ses/下(文件名与 MeloTTS 的 speaker 键名小写对应)。
⚠️ 避坑速查
- 现象:克隆出来的口音、情感和参考人完全对不上。原因:OpenVoice 只克隆音色(tone color),口音和情感由基础说话人模型决定,不在转换范围内。解决:换用目标口音/情感的基础说话人模型,或自行训练并替换(框架支持直接换入自己的基础模型)。
- 现象:生成语音有杂音、质感差。原因:参考音频带背景噪声、时长过短、多人同说、或含大段静音;参考音频过短还会直接抛出
input audio is too short。解决:换 5~15 秒、单人、干净无长静音的录音;同一说话人参考音频文件名尽量唯一,避免processed目录里的旧切分结果造成混乱(官方排查清单见 docs/QA.md)。 - 现象:
get_se时卡在 Silero VAD 模型下载并报错。原因:se_extractor默认用 Silero VAD 切分音频,首次运行需联网拉取模型,网络不通则失败。解决:手动下载 Silero VAD 仓库 zip 包,解压到~/.cache/torch/hub/snakers4_silero-vad_master(详见 openvoice/se_extractor.py 与官方 QA)。 - 现象:纯 CPU 机器上调
get_se(..., vad=False)报 CUDA 相关错误。原因:whisper 切分分支在代码里固定使用device="cuda"+ float16。解决:没有 GPU 就保持默认的vad=True(Silero VAD 可跑 CPU),或配置好 GPU 环境。 - 现象:Gradio 网页里粘贴长文本被拒。原因:本地演示对输入有限制:文本不超过 200 字符,语言仅支持中文和英文。解决:正式使用走 Notebook 代码路径,长文本可先自行分句再逐段合成(
BaseSpeakerTTS.tts内部本身就按句切分)。
收尾
OpenVoice 的价值在于把"音色"从 TTS 里拆成了可替换的部件:MIT 许可可免费商用,5 秒音频即可克隆音色,换语言只需换基础说话人模型,仓库内 demo 和 Gradio 网页开箱即用。边界也要清楚:它只复刻音色不复刻口音和情感,V1 自带基础模型只有英/中两套,其他语言要自己接 TTS 当底稿;它是给开发者搭能力的技术底座,不是拿来即用的成品。
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考