OpenVoice 语音克隆本地部署指南:一段参考音频,克隆出能跨语言说话的音色
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
OpenVoice 是 MIT 与 MyShell 开源的即时语音克隆项目,核心能力是从 3~5 秒参考音频中提取音色,并让该音色用其他语言朗读文本。按本指南完成本地部署后,你可以直接生成一段带自己(或他人)音色的中文/英文语音文件,全程不依赖在线服务,音频不离开本机。
先搞懂原理:它到底克隆了什么
OpenVoice 的生成链路是"两步拼接",理解这一点后面排查问题会容易很多:
- 基础说话人 TTS(Base Speaker):负责把文本读成带节奏、语调的语音,口音和情感也由它决定。
- 音色转换器(Tone Color Converter):把参考音频中的音色特征"搬"到上一步生成的语音上。
💡 关键结论:它只克隆音色,不克隆口音和情感。官方 docs/QA.md 明确说明,输出语音的口音和情感来自基础 TTS 模型——所以"想要更带情感的输出"不是调参数能解决的,而是换带该风格的基础说话人模型(V1 里就内置了whispering这种风格型说话人)。
环境准备:安装依赖和拉取模型文件
官方安装路径写得很短,照做即可(依据:docs/USAGE.md 的 Linux Install 一节):
conda create -n openvoice python=3.9 conda activate openvoice git clone https://gitcode.com/GitHub_Trending/op/OpenVoice cd OpenVoice pip install -e .依赖版本被 requirements.txt 锁死(如librosa==0.9.1、gradio==3.48.0、faster-whisper==0.9.0),conda 独立环境能避免和已有环境冲突,推荐 Python 3.9,因为官方只验证了这个版本。
模型权重需要从官方 S3 链接下载(V1 与 V2 是两个不同的压缩包),解压目录名不能错:
| 版本 | 解压目录 | 内含内容 |
|---|---|---|
| V1 | checkpoints/ | converter/、base_speakers/EN/、base_speakers/ZH/ |
| V2 | checkpoints_v2/ | converter/、base_speakers/ses/ |
⚠️ 如果机器访问不了模型托管源,可以先在能联网的机器上下载再拷入。首次运行se_extractor.get_se时还会自动拉取 Silero VAD 模型,同样受网络影响,失败时按 docs/QA.md 的说明手动下载 zip 放到~/.cache/torch/hub/。
跑通最小链路:V1 生成第一句克隆语音
V1 的完整调用流程就是 demo_part1.ipynb 里的这几行,核心是"先提音色,再生成,最后转换":
import torch from openvoice import se_extractor from openvoice.api import BaseSpeakerTTS, ToneColorConverter device = "cuda:0" if torch.cuda.is_available() else "cpu" # 1. 加载基础 TTS 和音色转换器 base_tts = BaseSpeakerTTS('checkpoints/base_speakers/EN/config.json', device=device) base_tts.load_ckpt('checkpoints/base_speakers/EN/checkpoint.pth') converter = ToneColorConverter('checkpoints/converter/config.json', device=device) converter.load_ckpt('checkpoints/converter/checkpoint.pth') # 2. 从参考音频提取音色(VAD 自动切分静音) ref_se, _ = se_extractor.get_se('resources/example_reference.mp3', converter, target_dir='processed', vad=True) # 3. 基础 TTS 生成中间语音,再用转换器换成参考音色 base_tts.tts("This audio is generated by OpenVoice.", 'outputs/tmp.wav', speaker='default', language='English', speed=1.0) converter.convert(audio_src_path='outputs/tmp.wav', src_se=torch.load('checkpoints/base_speakers/EN/en_default_se.pth'), tgt_se=ref_se, output_path='outputs/cloned.wav', message="@MyShell")参考音频放在哪里都行,仓库自带resources/example_reference.mp3可以直接当测试素材。参考音频要求(依据 QA 文档的排查清单):无背景噪音、单人说话、不太短、没有长时间空白;长度上几秒到几十秒均可,官方 notebook 用 VAD 按约 10 秒切片处理。
✅ 验证点:outputs/cloned.wav的音色接近参考音频、内容是你写的文本。如果内容对但音色不像,直接进入下一节排查。
克隆效果不像的排查顺序
按命中率从高到低依次检查,这四条来自官方 docs/QA.md:
- 参考音频是否混有背景噪音或其他人声?
- 参考音频是否过短,或包含大段静音?
- 是否用了和上次相同文件名的参考音频,但旧
processed/缓存没删?这是官方点名的坑:get_se的缓存目录按音频名组织,旧缓存会被直接复用。 - 输出"像但不像"往往不是 bug:如前文所说,口音/情感不由音色转换器决定,这是架构设计而非效果缺陷。
💡 想微调相似度,convert()有个tau参数(默认 0.3),它是 Flow 匹配阶段的温度系数,调大输出会更平滑地贴向目标音色;具体取舍建议以多组对照试听为准,官方文档未给出推荐区间。
进阶:V2 跨语言克隆和 Gradio 界面
两条延伸路线可以按需选择:
- 要更多语言 → 用 V2。V2 需要额外安装 MeloTTS 作为基础 TTS(
pip install git+https://github.com/myshell-ai/MeloTTS.git,再跑python -m unidic download),原生支持英、西、法、中、日、韩六种语言,流程见 demo_part3.ipynb:先用 MeloTTS 生成文本语音,再走同一个ToneColorConverter.convert换音色。跨语言克隆时注意:目标语言必须有对应的基础说话人模型覆盖,这是架构约束。 - 要网页界面 → 跑 Gradio demo。V1 内置了本地界面,一条命令启动(依据 USAGE 文档):
python -m openvoice_app --share启动后按提示访问地址即可,界面自动检测输入文本是中文还是英文并路由到对应基础说话人。⚠️ 注意官方建议:Gradio demo 遇到问题时先回看 demo_part1/part2 和 QA 文档,官方自己声明它"极简",参数暴露得比 notebook 少。
适用边界与下一步
OpenVoice 是 MIT 协议的技术框架而非成品应用(官方原话:Technology, not a Product),个别音色克隆不稳定属正常现象,生产化需要自己补工程。建议下一步从 demo_part2.ipynb 入手试跨语言场景,或把 V2 的多语言流程封装成自己的服务接口;模型下载链接与版本差异以 docs/USAGE.md 为准。
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考