OpenVoice 语音克隆:3秒参考音频如何做到跨语言音色迁移与风格自由控制
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
OpenVoice 语音克隆把音色从语音里单独拆出来处理:一段几秒的参考音频足够提取音色,情感和语速等风格交给基础 TTS 模型独立调节。这样你既能复刻音色,又不受参考音频语气的限制,还能在本地部署下完全掌控数据。读完本文,你能搭好本地环境、跑通第一次克隆,并针对跨语言、批量合成两类需求调出稳定效果。
理解核心能力:音色与风格为什么能分开调
OpenVoice 的推理链路可以概括为两步:base speaker TTS 先生出带目标风格(情感、节奏、语调)的中间音频,ToneColorConverter(一个基于 Flow 网络的音色转换器,可以理解成"音色贴皮滤镜")再把参考说话人的 tone color 叠上去,输出保留目标风格的克隆语音。
流程截图展示了完整的克隆链路:上传参考音频、创建一个克隆音色、试听并核对效果报告。对应到能力边界,速查如下:
| 能力 | 是否支持 | 备注 |
|---|---|---|
| 零样本跨语言克隆 | 支持 | 参考语音与目标语言均无需出现在训练集中(V1/V2 均支持) |
| 风格控制 | 支持 | speaker 可选 default、friendly、cheerful、excited、sad、angry、terrified、shouting、whispering;speed 控制语速 |
| 多语言基础 TTS | V2 支持 | V2 搭配 MeloTTS,原生覆盖英、西、法、中、日、韩 6 种语言 |
| 情感/口音克隆 | 不支持 | 二者由 base speaker 决定,转换器只迁移 tone color |
| 音频水印 | 支持 | convert()默认嵌入可检测的 wavmark 水印 |
| 本地 Gradio 调试 | 支持 | python -m openvoice_app --share启动 |
跑通第一次克隆:最短路径
环境搭建只需要 conda、依赖安装和检查点三步:
conda create -n openvoice python=3.9 -y conda activate openvoice git clone https://gitcode.com/GitHub_Trending/op/OpenVoice cd OpenVoice pip install -e . # 将 V2 官方检查点压缩包解压至 checkpoints_v2/(V1 解压至 checkpoints/) python -m openvoice_app --share # 可选:启动本地 Gradio 面板V2 还需额外安装 MeloTTS 并执行python -m unidic download;如果网络受限,可改为从本地获取 MeloTTS 包安装,避免依赖外部源。
调用侧的最小逻辑是"提取音色 → 生成中间音频 → 转换音色":
import torch from openvoice import se_extractor from openvoice.api import BaseSpeakerTTS, ToneColorConverter device = "cuda:0" if torch.cuda.is_available() else "cpu" tone_color_converter = ToneColorConverter('checkpoints_v2/converter/config.json', device=device) tone_color_converter.load_ckpt('checkpoints_v2/converter/checkpoint.pth') # 1) 从几秒参考音频提取目标音色编码(文件名需唯一,否则读到旧缓存) target_se, audio_name = se_extractor.get_se('resources/example_reference.mp3', tone_color_converter, vad=True) # 2) base speaker 先生成中间音频(V2 用 MeloTTS 充当 base speaker) src_path = 'outputs/tmp.wav' # 3) 音色转换:src_se 需与所用 base speaker 配套 out_path = tone_color_converter.convert(src_path, src_se, target_se, output_path='outputs/cloned.wav', message='@MyShell')convert默认会在输出里嵌入音频水印(由 wavmark 实现),message参数就是水印内容。
落地三个高频场景:迁移、批量、调参
跨语言音色迁移
迁移的关键在于:target_se与语言无关,同一份 tone color 编码可以叠到任意语言的 base speaker 上。以 V1 为例,换成中文 base speaker 即可让"英文参考音色"说中文:
# 中文 base speaker(检查点位于 checkpoints/base_speakers/ZH) base_speaker_tts = BaseSpeakerTTS('checkpoints/base_speakers/ZH/config.json', device=device) base_speaker_tts.load_ckpt('checkpoints/base_speakers/ZH/checkpoint.pth') source_se = torch.load('checkpoints/base_speakers/ZH/zh_default_se.pth').to(device) text = "今天天气真好,我们一起出去吃饭吧。" base_speaker_tts.tts(text, 'outputs/zh_raw.wav', speaker='default', language='Chinese', speed=1.0) tone_color_converter.convert('outputs/zh_raw.wav', source_se, target_se, output_path='outputs/zh_cloned.wav', message='@MyShell')调参要点:tone color 可以跨语言复用,但 emotion 和 accent 由 base speaker 决定,换语言时source_se必须同步换成对应 speaker 的编码文件(V2 的各语言编码预置在checkpoints_v2/ses/目录)。完整的跨语言演示见 demo_part2.ipynb。
⚡ 快速提示:参考音频文件名要全局唯一。se_extractor按文件名缓存提取结果且不自动覆盖——你更新了参考音频却忘了删processed/缓存目录,生成的还是旧音色。
多风格批量合成
同一句文本循环切换 speaker,就能批量产出多种风格,风格与语速取值范围如下:
| 参数 | 取值范围 | 说明 |
|---|---|---|
| speed | 0.5 ~ 2.0 | 语速,内部按 1/speed 缩放时长,1.0 为正常 |
| speaker | default 及 8 种情感风格 | friendly、cheerful、excited、sad、angry、terrified、shouting、whispering |
| tau | 0 ~ 1,默认 0.3 | convert 中音色融合强度 |
styles = ['friendly', 'cheerful', 'excited', 'whispering', 'angry'] for style in styles: # 换风格时 source_se 同步切换为该 speaker 对应的编码 base_speaker_tts.tts(text, src_path, speaker=style, language='English', speed=1.0) tone_color_converter.convert(src_path, source_se, target_se, output_path=f'outputs/style_{style}.wav', message='@MyShell')V2 下 base speaker 由 MeloTTS 承担,语言标签取 EN、ES、FR、ZH、JP、KR,中英混排文本可直接输入(V2 演示见 demo_part3.ipynb)。
⚡ 快速提示:语速不是越慢越自然,speed 低于 0.7 后语调容易发飘;情感风格之间切换时务必同步换source_se,否则音色会带着上一个风格说话人的平均音色。
启动本地 Gradio 面板
装好依赖后一条命令即可调试:
python -m openvoice_app --share界面功能点:
- 参考音频上传区:粘贴或上传音频,自动走 VAD 提取 tone color
- 文本输入框:支持长文本,自动按句切分后逐段合成
- 风格与语速选择:speaker 与 speed 参数直接对应
tts()的入参 - 输出播放区:生成结果与参考音频并列对比试听
面板问题较多时,建议先对照 docs/QA.md 排查,再看前面三个 notebook 的等价调用。
排查避坑清单:四条高频错误对照
- ❌ 拿带背景音乐或多人说话的录音做参考 → ✅ 参考音频必须干净、单人、无长静音段;背景噪声和长空白都会直接污染 tone color 提取
- ❌ 期待转换器克隆情感或口音 → ✅ 情感与口音由 base speaker 决定,想换风格就切换
speaker参数并同步换source_se;想换口音就换对应 base speaker 模型 - ❌ 复用旧文件名上传参考音频 → ✅ 每个说话人用唯一文件名;改过音频记得删
processed/缓存,否则读到的是旧编码 - ❌ 首次运行
se_extractor.get_se时 silero-vad 缓存下载失败 → ✅ 离线环境按 docs/QA.md 的手动下载说明,把 VAD 缓存放到~/.cache/torch/hub对应目录
延伸资源
- 安装步骤、V1/V2 检查点获取位置与 Gradio 启动:docs/USAGE.md
- 音频质量、语言支持、安装报错的官方排查:docs/QA.md
- 风格控制调用:demo_part1.ipynb;跨语言克隆:demo_part2.ipynb;V2 多语言批量:demo_part3.ipynb
具体报错信息优先查 QA 文档,接口参数以 openvoice/api.py 中的BaseSpeakerTTS与ToneColorConverter为准。
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考