如何5分钟跑通OpenVoice:开源语音克隆完整上手指南
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
你手里有一段 5 秒录音,想让"另一个人"用同样的音色说出完全不同的话——这正是 OpenVoice 做的事。它是由 MIT 和 MyShell 开源的即时语音克隆(instant voice cloning)音频基础模型,通过"音色转换器"(Tone Color Converter)从参考音频里提取音色,再贴到任意 TTS 生成的语音上,全程 MIT 协议,可商用。
🎯 先搞懂一个关键设计:它只克隆"音色",不克隆"腔调"
很多项目的第一次翻车都源于对 OpenVoice 的误解。官方在 docs/QA.md 里说得很直白:OpenVoice 只克隆参考说话人的音色(tone color),不克隆口音和情感。输出语音的口音、情绪、节奏、语调,全部由"基础说话人 TTS 模型"(Base Speaker TTS)决定。
说白了,整条流水线分两步:基础说话人 TTS 负责"说什么、怎么说"(语言、口音、情感参数),音色转换器负责"听起来像谁"。架构图里能看到,音色提取器从参考语音里拿到 tone color embedding,同时 Encoder 侧生成"去掉了音色、保留全部其他风格"的 IPA 对齐特征,两者在 Flow 网络里融合后由 Decoder 输出语音:
这个分离式设计带来两个实际好处:一是零样本跨语言——参考语音和生成语音的语言都不需要在训练集里出现过;二是风格可控——想换口音不用换音色,换个基础说话人模型即可。
💻 安装与版本选择:V1 和 V2 只差一个 checkpoint 目录
环境要求不苛刻:Python 3.9 + PyTorch,Linux 下最省心。安装步骤只有一套,V1/V2 完全相同:
conda create -n openvoice python=3.9 conda activate openvoice git clone https://gitcode.com/GitHub_Trending/op/OpenVoice cd OpenVoice pip install -e .之后按需求下载对应 checkpoint 解压到指定目录即可(V1 解压到checkpoints,V2 解压到checkpoints_v2)。两个版本怎么选:
| OpenVoice V1 | OpenVoice V2 | |
|---|---|---|
| 音频质量 | 基础 | 显著提升(改进训练策略) |
| 语言支持 | 任意语言(自备基础说话人模型) | 英、西、法、中、日、韩原生支持 |
| 基础 TTS | 仓库自带 base speakers | 需额外安装 MeloTTS(pip install MeloTTS后执行python -m unidic download) |
| 许可 | MIT | MIT |
如果目标是中文、日文等语言的日常使用,直接上 V2;如果只是想快速验证跨语言克隆的玩法,V1 自带的英文/中文基础说话人就够。
🚀 最短路径:跑通第一段克隆语音
跑通之后再看细节。以下代码对应 demo_part1.ipynb 的核心流程,设备用cuda(无 GPU 时改成cpu,但se_extractor里的 Whisper 模型依赖 CUDA,纯 CPU 环境建议vad=False):
from openvoice import se_extractor from openvoice.api import BaseSpeakerTTS, ToneColorConverter device = 'cuda' # 基础说话人 TTS(负责内容和口音) base = BaseSpeakerTTS('checkpoints/base_speakers/EN/config.json', device=device) base.load_ckpt('checkpoints/base_speakers/EN/checkpoint.pth') # 音色转换器(负责"像谁") converter = ToneColorConverter('checkpoints/converter/config.json', device=device) converter.load_ckpt('checkpoints/converter/checkpoint.pth') # 1. 从参考音频提取目标音色(自动 VAD 切分 + 多段平均) target_se, name = se_extractor.get_se('resources/example_reference.mp3', converter, vad=True) # 2. 生成任意语言的中间语音 base.tts('Hello, this is a cloned voice demo.', 'tmp/en.wav', speaker='default', language='English') # 3. 音色转换,贴回参考音色 converter.convert('tmp/en.wav', target_se, target_se, output_path='out.wav')三个要点值得注意:
get_se会先用 Silero VAD 把参考音频切段,再对每段的音色 embedding 取平均,所以参考音频 5~15 秒即可,不用刻意凑长。convert的tau=0.3是相似度系数,官方默认值,一般不用动;调大让输出更贴近参考音色,调小则保留更多原始韵律。- 想跳过代码直接玩,仓库自带极简 Gradio 本地界面,一条命令
python -m openvoice_app --share启动,浏览器里贴文件、改文字、点生成就行。
不想本地部署的话,也可以直接在 MyShell 平台上体验它的语音克隆能力:进入 Workshop → 创建 Bot → 通过语音克隆创建声音,三步完成:
🔍 克隆效果不理想时的3个排查方向
效果不好时,九成问题出在参考音频,而不是模型。按官方 QA 的清单逐条过:
- 有背景噪声——换成干净录音,这是最常见的原因。
- 音频太短或混入多人说话——
split_audio_vad切出的有效段不够,音色 embedding 不稳定。 - 长段空白——VAD 之后的有效语音占比太低。
- 改了文件名但没删
processed目录——这是最容易忽略的坑:get_se按文件内容 hash 命名缓存,同名旧缓存可能导致你以为换了参考音频其实没有。
安装阶段还有一个高频坑:Silero VAD 模型从 GitHub 拉取,网络不通时get_vad_segments会报错。解决办法是手动下载 zip 包解压到~/.cache/torch/hub/snakers4_silero-vad_master,详见 docs/QA.md。
🌍 进阶:跨语言克隆和多语言原生支持
V1 的跨语言玩法在 demo_part2.ipynb 里:换不同语言的基础说话人模型(如checkpoints/base_speakers/ZH),音色 embedding 保持不变,就能让同一音色说中文、带印度口音的英文等——tts()的speaker参数可以选default、whispering等不同基础说话人,speed控制语速,情感则靠换模型实现。
V2 更进一步,用 demo_part3.ipynb 配合 MeloTTS 作为基础说话人,对英语(含美式、英式、印度、澳式口音)、西班牙语、法语、中文、日语、韩语做了原生支持,基础说话人的音色 embedding 直接预存在checkpoints_v2/base_speakers/ses/里,省掉了提取步骤。多语言混排场景(比如英文主体里夹一句中文旁白)目前是分段生成再拼接的方案,单句内部不做语言切换,这个边界要心里有数。
最后提醒一句:OpenVoice 官方定位是"技术而非产品",多数声音在正确使用下效果很好,但别期待每段录音都完美。生成音频自带 wavmark 隐形水印(ToneColorConverter默认enable_watermark=True),用于标识克隆来源,商用时留意这一点。
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考