OpenVoice 即时语音克隆:10 秒音频克隆音色,3 步本地跑通
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
OpenVoice 是由 MIT 与 MyShell 开源的即时语音克隆(Instant Voice Cloning)音频基础模型:给一段参考音频,它就能把说话人的"音色"迁移到任意语言的新语音上,MIT 协议、可商用。这篇文章带你从"一段音频变成可用音色"这个场景出发,讲清它的拆音思路,并给出从安装到推理的最短路径和排坑清单。
一段音频变音色:它能解决什么问题
假设你有两种常见需求:
- 手里有一段 10 秒左右的录音,想让自己的声音"开口说"一段从没念过的文案;
- 想让同一个声音说中文、英文、日文,且不用分别录音。
传统做法是分别录音再剪辑,成本高且不可复用。OpenVoice 的思路是把"音色"从语音里拆出来单独搬运:内容(说什么、什么口音、什么情绪)由一个基础 TTS 模型负责生成,OpenVoice 只负责最后一步——把参考音频的音色"刷"到生成结果上。
类比一下:基础 TTS 像一个声线中性的配音演员先念稿,OpenVoice 则是一位调音师,负责把这段稿子染成目标声音的"声纹颜色",其他什么都不动。
拆开看:Base Speaker + Tone Color Converter 两段流水线
OpenVoice 的推理由两个模型接力完成(核心实现见 openvoice/api.py):
- Base Speaker TTS:负责生成内容、语速、口音、情绪。V1 内置英文/中文基础说话人模型,V2 则搭配 MeloTTS,原生支持英语、西班牙语、法语、中文、日语、韩语六种语言;
- Tone Color Converter(音色转换器):先用 openvoice/se_extractor.py 从参考音频中提取音色嵌入(se),再配合 Encoder-Flow-Decoder 结构把音色写到新语音上。关键在于它使用IPA(国际音标)对齐的特征——这些特征"抹掉音色但保留所有其他风格",所以换音色不会连带把口音、节奏也换掉。
这也解释了一个高频疑问:OpenVoice 只克隆音色,不克隆口音和情绪。想要某种口音或情绪,应该换一个带该风格的基础说话人模型,而不是指望转换器"复制"过来。
不装环境先体验:两条低门槛路径
如果只是想听效果,不必先折腾本地环境:
- 跑官方 Gradio 本地演示(装完依赖后):
python -m openvoice_app --share; - 参考 demo_part1.ipynb、demo_part2.ipynb、demo_part3.ipynb 三个 Notebook,分别对应风格控制、跨语言克隆、V2 多语言演示。
三步跑通:安装、下模型、写 10 行推理代码
第一步:装环境。需要 Linux + Python 3.9 + PyTorch(GPU 可选),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 .第二步:放模型权重。从官方发布页下载对应版本检查点压缩包,解压到项目根目录的checkpoints(V1)或checkpoints_v2(V2)文件夹。V2 还需额外安装 MeloTTS 依赖并运行python -m unidic download拉取日语分词词典,细节见 docs/USAGE.md。
第三步:调用。整个克隆链路其实只有三步:加载两个模型、提取参考音色、生成后转换。最小可运行示例(英文文本 → 目标音色):
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. 从参考音频提取目标音色(se_extractor 会自动 VAD 切段) target_se, _ = se_extractor.get_se('resources/example_reference.mp3', converter, vad=True) source_se = torch.load('checkpoints/base_speakers/EN/en_default_se.pth').to(device) # 3. 先合成"底稿",再刷上目标音色 base_tts.tts("Hello, this is OpenVoice.", "tmp.wav", speaker='default', language='English', speed=1.0) converter.convert('tmp.wav', source_se, target_se, output_path='output.wav')想换风格时,把speaker参数换成cheerful、whispering、sad等即可(可选值见 demo_part1.ipynb),speed控制语速。注意:get_se会按"文件名 + 音频哈希"缓存结果到processed文件夹且不会自动覆盖,换参考音频请换文件名。
V2 的用法见 demo_part3.ipynb:用 MeloTTS 的TTS(language=...)生成底稿,音色转换部分与上面完全一致,只是权重路径换到checkpoints_v2。
V1 还是 V2:一张表帮你选
| 对比项 | OpenVoice V1 | OpenVoice V2(2024.04 起) | 选型建议 |
|---|---|---|---|
| 音频质量 | 基线水平 | 训练策略更强,听感更自然 | 追求音质选 V2 |
| 语言支持 | 任意语言,取决于你配的基础 TTS | 英/西/法/中/日/韩原生支持 | 六国语言选 V2;小众语言用 V1 自配基础模型 |
| 基础模型 | 内置英中 BaseSpeaker | 搭配 MeloTTS | 想换底座(如其他开源 TTS)更自由的是 V1 思路 |
| 许可 | MIT | MIT,明确可商用 | 两者均可商用 |
补充一个进阶点:V1 的"任意语言"能力来自零样本跨语言设计——参考语音和生成语音所用的语言都可以不在训练集里,因为音色转换器只认音色特征,不认语言。
效果不对?先查这 4 个地方
按命中率从高到低排:
- 参考音频不干净。要求:单人、无背景噪声、无长段静音,5~15 秒最佳。多人对话、带 BGM 的片段都会污染音色嵌入;
- 缓存没删。
processed文件夹按文件名存了旧结果,同名文件换内容后务必清理; - Silero VAD 下载失败。
get_vad_segments首次运行需联网拉取 Silero VAD 模型,网络受限时会报错——手动下载该压缩包解压到~/.cache/torch/hub/对应目录即可,详见 docs/QA.md; - 期望错位。觉得"口音/情绪不像",不是 bug:转换器不克隆这两项,需换基础说话人模型(官方甚至建议可直接用 OpenAI TTS 充当底座,见 demo_part2.ipynb)。
官方在 docs/QA.md 里有一句实话值得记住:OpenVoice 是技术而非产品,它面向开发者与研究者,大多数场景可用,但不保证每个声音都完美。
一句话收尾
一句话记住 OpenVoice:音色归转换器,风格归基础 TTS,IPA 对齐保证两者互不串味——先按三步把链路跑通,再用 V2 换六国语言,剩下的都是调参的小事。
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考