ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

5 分钟跑通 OpenVoice:开源零样本语音克隆如何做到“一句话换音色“

5 分钟跑通 OpenVoice:开源零样本语音克隆如何做到“一句话换音色“ 5 分钟跑通 OpenVoice开源零样本语音克隆如何做到一句话换音色【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoiceOpenVoice 是 MIT 与 MyShell 联合开源的音频基础模型核心能力是零样本语音克隆给它几秒参考音频提取出说话人的音色特征SE 向量再让一段已生成的语音换成这个人的声音并支持跨语言输出和风格控制。适合想给自己的应用接入换声能力的开发者和研究者。装好环境、下载好模型后约 5 分钟就能用最小示例跑出一段克隆语音不想装环境的话官方文档里列的在线小部件可以直接试。一、快速上手从 clone 到第一段克隆语音先说清楚它能干什么再动手输入任意语言的参考音频OpenVoice 提取音色后用目标音色朗读指定文本V2 版本原生支持英语、西班牙语、法语、中文、日语、韩语六种语言且 V1、V2 均为 MIT 协议可商用。环境要求很轻Linux 系统官方安装指南面向 LinuxWindows/Docker 有社区非官方指南Python 3.9 conda PyTorch有 NVIDIA GPU 体验最好CPU 也能跑下载好的模型检查点V1 解压到checkpoints/V2 解压到checkpoints_v2/下载地址在官方使用说明里V2 额外需要 MeloTTS 作为基础 TTS 引擎pip install githttps://github.com/myshell-ai/MeloTTS.git然后python -m unidic download命令合在一起就是一段conda create -n openvoice python3.9 conda activate openvoice git clone https://gitcode.com/GitHub_Trending/op/OpenVoice cd OpenVoice pip install -e . # 按 docs/USAGE.md 中的链接下载 checkpoints_1226.zip 解压到 checkpoints/最小可运行示例基于 demo_part1.ipynb 精简V1 英文版import torch from openvoice import se_extractor from openvoice.api import BaseSpeakerTTS, ToneColorConverter device cuda:0 if torch.cuda.is_available() else cpu # 基础说话人 TTS负责念字音色是它自带的 base BaseSpeakerTTS(checkpoints/base_speakers/EN/config.json, devicedevice) base.load_ckpt(checkpoints/base_speakers/EN/checkpoint.pth) # 音色转换器把基础音色替换成目标音色 converter ToneColorConverter(checkpoints/converter/config.json, devicedevice) converter.load_ckpt(checkpoints/converter/checkpoint.pth) # 从参考音频提取目标音色自动 VAD 分段缓存到 processed/ 目录 target_se, _ se_extractor.get_se(resources/example_reference.mp3, converter, vadTrue) src_se torch.load(checkpoints/base_speakers/EN/en_default_se.pth).to(device) base.tts(Hello, this is a cloned voice., outputs/tmp.wav, speakerdefault, languageEnglish, speed1.0) converter.convert(outputs/tmp.wav, src_se, target_se, output_pathoutputs/cloned.wav, messageMyShell)跑完听outputs/cloned.wav内容念得字正腔圆声音却换成了参考音频里的那个人。V2 的最小流程见 demo_part3.ipynb把checkpoints换成checkpoints_v2基础 TTS 换成 MeloTTS 即可。二、场景实战三种最常见用法场景 1给克隆语音换风格耳语、慢速想要什么效果同一音色下让说话人用耳语、慢速等不同风格念同一句话。怎么做V1 的基础说话人模型内置多个风格位default、whispering换风格只需要改tts()的speaker参数并加载对应的风格 SEsource_se torch.load(checkpoints/base_speakers/EN/en_style_se.pth).to(device) base.tts(text, outputs/tmp.wav, speakerwhispering, languageEnglish, speed0.9) # speed1 变慢1 变快关键参数speaker决定风格位speed控制语速内部实现为length_scale 1/speed。完整示例见 demo_part1.ipynb。场景 2跨语言克隆参考是中文念英语想要什么效果用一个人的中文参考音频让他说另一种语言——这正是 OpenVoice 主打的零样本跨语言克隆参考语音和生成语音的语言都可以不在多说话人多语言训练集里。怎么做跨语言的换字靠基础 TTS 完成音色部分不动。V1 自带 EN、ZH 两个基础模型中文文本直接换checkpoints/base_speakers/ZH的模型和zh_default_se.pthlanguageChinese# 换基础说话人模型ZH后 base_zh.tts(今天天气真好我们一起出去吃饭吧。, outputs/tmp.wav, speakerdefault, languageChinese, speed1.0)六种语言的完整对比在 demo_part3.ipynbV1 的跨语言示例含用 OpenAI TTS 当任意语言基础音色的玩法在 demo_part2.ipynb。场景 3不想写代码起个本地页面想要什么效果网页上传参考音频、输入文本、点按钮出结果。怎么做一行命令启动 Gradio 本地 Demo支持中、英python -m openvoice_app --share # --share 生成可分享链接界面逻辑就是选风格 传音频 填文本三步。三、机制速览三个模块各管一摊OpenVoice 把生成语音拆成两件事基础说话人 TTS 模型BaseSpeakerTTS负责念字、定节奏和情感它念出来的声音是自带的默认音色音色转换器ToneColorConverter负责换嗓子。你先把参考音频喂给extract_se/get_se得到目标音色向量再让转换器把 TTS 输出的源音色替换成目标音色——类比一下TTS 是写了稿子的播音员转换器是把播音员的嗓音 P 成指定的人稿子和台风都不变。替换之所以干净靠的是 IPA 对齐国际音标对齐转换器内部把语音编码成与具体音色无关的音素级特征只替换音色维度其余风格信息原样保留。这也是它敢承诺参考语音和生成语音都可以是训练集外的语言的原因。四、调参与避坑参数速查 常见坑清单参数速查表参数推荐值最低要求影响参考音频时长5–15 秒3 秒左右太短音色特征提取不准get_se会按 10 秒自动分段参考音频质量干净、单人、无长静音无明显背景噪声噪声会被当成音色一起克隆过去speedtts1.00.5–2.0 之间语速控制实现为 length_scale1/speedspeakertts按风格选 default/whispering模型内存在的风格位决定风格位需搭配对应风格的 src_setauconvert默认 0.30.0–1.0音色融合强度越小保留源音色越多vadget_seTrueFalseTrue 时自动分段并缓存到processed/重复调用直接读缓存messageconvert如 MyShell任意短字符串输出音频会嵌入该字符串水印可用detect_watermark检测常见坑清单生成音色不像参考人 → 先检查参考音频是否有背景噪声、是否多人同框、是否夹杂长静音另一个高频原因是重用了旧缓存——换音频但文件名不变且processed/没清理get_se会返回上一次的 SE → 清理processed/目录后重新提取。觉得口音/情感和参考人不一样 → 这不是 bugOpenVoice 只克隆音色口音和情感由基础 TTS 模型决定 → 想换口音/情感就换对应风格的基础说话人模型或自己训练接入框架设计上就是可替换的。跨语言发音不标准 → V1 的BaseSpeakerTTS.tts()只认English/Chinese两个 language 值传别的会直接 assert 报错 → 六语言原生输出请用 V2 MeloTTS或按 demo_part2.ipynb 的思路自备其他语言基础 TTS。第一次跑get_se卡在下载 Silero VAD → 机器访问不了 GitHub 导致 VAD 模型拉取失败 → 手动下载 silero-vad 的 zip 解压到~/.cache/torch/hub/对应目录docs/QA.md 有说明。输出里隐约觉得不太干净 → 默认开启水印音频中嵌入了message字符串 → 不需要水印时可初始化ToneColorConverter(..., enable_watermarkFalse)。V2 安装 MeloTTS 时依赖冲突 → 官方指南是先pip install -e .装 OpenVoice 本体再单独装 MeloTTS冲突时建议独立 conda 环境隔离处理。五、走向生产几点建议点到为止SE 向量是纯 torch 张量参考音频不变就把它存下来extract_se支持se_save_path服务里别每次请求都重新get_se。GPU 推理 模型常驻内存BaseSpeakerTTS按语言各加载一份内存吃紧时只挂当前用得到的语言。快速验证可以直接python -m openvoice_app --share起 Gradio 服务正式接入时把tts convert两步包进 HTTP 接口即可核心 API 都在 openvoice/api.py音色提取在 openvoice/se_extractor.py。长文本会自动按句切分后拼接tts()内置分句单句过长仍建议自行按标点切段再逐段生成。OpenVoice 的定位是技术而非开箱即用的产品——多数情况下它表现很好但工程化打磨稳定性、极端 case仍需你自己补上。想继续深入从这三个入口开始最快docs/USAGE.md安装与检查点下载、docs/QA.md官方问答、demo_part1.ipynb / demo_part2.ipynb / demo_part3.ipynb三个版本的完整可跑示例。【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进