OpenVoice 语音克隆本地部署完整指南:3 秒参考音频换音色,原理到调优一次讲透
OpenVoice 语音克隆本地部署完整指南3 秒参考音频换音色原理到调优一次讲透【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice给别人一段 3~10 秒的录音就要一段用这个人的声音说新台词的音频——配音、有声书、个人语音助手原型都要反复解决这个麻烦。OpenVoice 是 MIT 与 MyShell 开源的即时语音克隆框架把这件事拆成两个可独立替换的模块先用任意 TTS 生成一段中间语音再用音色转换器把中间语音的音色替换成参考人的音色。V2 版本起采用 MIT 协议商用免费。先弄懂机制音色转换器和基础 TTS 是怎么分工的OpenVoice 语音克隆工作原理基础 TTS 模型负责文本与风格音色转换器Encoder→Flow→Decoder负责把音色替换为参考说话人整个流水线可以这样理解参考录音先经过Tone color extractor压缩成一个音色嵌入向量tone color embedding另一边文本交给基础 TTSBase Speaker合成一段带节奏、语调、情感的中间音频。转换器的 Encoder-Flow-Decoder 结构作用在 IPA 对齐特征上——它抹掉中间音频原有的音色只保留韵律再把参考人的音色贴上去。这就是为什么 OpenVoice 能跨语言克隆韵律由基础 TTS 决定音色由嵌入向量决定两者互不依赖。代码层面只涉及三个入口类全部在 openvoice/api.pyBaseSpeakerTTS加载checkpoints/base_speakers/EN或ZH的基础 TTS输出中间音频ToneColorConverter音色转换器核心方法convert()se_extractor.get_se()从参考录音提取音色嵌入内部用 faster-whisper Silero VAD 切分语音段对比维度传统端到端语音克隆OpenVoice 的方案训练数据要求目标说话人需分钟级以上录音3~10 秒参考录音即可zero-shot音色与风格的关系绑定在同一个模型里改风格要重训解耦风格换基础 TTS音色换嵌入向量换一种语言需要对应语言的说话人模型替换基础 TTS 或直接用多语言基础 TTS工程门槛需要自训 VITS 类模型下载 checkpoint 直接推理openvoice/ 代码可二次集成环境准备安装前值得确认的几件事官方安装脚本以 Linux Python 3.9 为基准见 docs/USAGE.md。Windows 与 Docker 的第三方指南也列在文档Install on Other Platforms一节。conda create -n openvoice python3.9 -y conda activate openvoice git clone https://gitcode.com/GitHub_Trending/op/OpenVoice cd OpenVoice pip install -e . # 安装 setup.py 中锁定的全部依赖V1 和 V2 的安装命令完全相同区别只在 checkpoint 目录和基础 TTS 的来源。依赖清单见 requirements.txt其中 librosa 0.9.1 与 numpy 1.22.0 版本锁定较老遇到 numpy ABI 报错时优先保证版本不被环境里其他包冲掉。⚠️ 首次运行se_extractor需要联网下载两个模型faster-whisper 的 medium 模型和 Silero VAD 权重。内网机器上 Silero 下载失败的典型处理方式是手动把snakers4_silero-vad_master放到~/.cache/torch/hub/下详见 docs/QA.md 的Error Related to Silero一节。 几个最常见的误区❌ 以为 OpenVoice 会连参考人的口音、情绪一起克隆。它只克隆音色。口音和情感由基础 TTS 模型决定想要另一种口音换带那种口音的基础 TTS官方 QA 里有明确说明。❌ 参考音频重复使用同一文件名。get_se()会按文件名缓存嵌入到processed/目录且不会自动覆盖换录音前先删掉旧的processed/子目录。❌ 直接拿多人说话、带 BGM 或大段静音的录音当参考。切段后每段会被要求 1.5~20 秒噪声段会直接污染嵌入。❌ 期望 V1 的本地 Gradio 界面支持 9 种风格。界面里中文基础 TTS 只有default风格控制只对英文基础 TTS 开放。最短可跑通路径V1 英文克隆按 demo_part1.ipynb 精简出的最小脚本下载好 V1 checkpoint 并解压到checkpoints/目录后即可运行import torch from openvoice import se_extractor from openvoice.api import BaseSpeakerTTS, ToneColorConverter device cuda:0 if torch.cuda.is_available() else cpu # 1. 加载基础 TTSEN 基础说话人 base_speaker_tts BaseSpeakerTTS(checkpoints/base_speakers/EN/config.json, devicedevice) base_speaker_tts.load_ckpt(checkpoints/base_speakers/EN/checkpoint.pth) # 2. 加载音色转换器 tone_color_converter ToneColorConverter(checkpoints/converter/config.json, devicedevice) tone_color_converter.load_ckpt(checkpoints/converter/checkpoint.pth) # 3. 基础说话人的音色嵌入checkpoint 自带 source_se torch.load(checkpoints/base_speakers/EN/en_default_se.pth).to(device) # 4. 从 3~10 秒干净参考录音提取目标音色嵌入 target_se, audio_name se_extractor.get_se( reference_voice.mp3, tone_color_converter, target_dirprocessed, vadTrue) # 5. 先生成中间音频再转换音色 base_speaker_tts.tts( This audio is generated by OpenVoice., outputs/tmp.wav, speakerdefault, languageEnglish, speed1.0) tone_color_converter.convert( audio_src_pathoutputs/tmp.wav, src_sesource_se, tgt_setarget_se, output_pathoutputs/cloned_en.wav, messageOpenVoice) 五步里真正干活的是第 4、5 步get_se产出参考人的音色向量convert把中间音频的音色替换上去。message参数是可选的音频水印wavmark公开部署时建议保留。场景一用同一副声音说不同情绪英文基础 TTS 自带 9 个风格说话人speaker参数可取default, friendly, cheerful, excited, sad, angry, terrified, shouting, whispering。切风格时source_se也要换成对应风格的嵌入否则转换器会把非目标音色抹平source_se torch.load(checkpoints/base_speakers/EN/en_style_se.pth).to(device) base_speaker_tts.tts(text, outputs/tmp.wav, speakerwhispering, languageEnglish, speed0.9) # 再跑一次 tone_color_converter.convert(...)输出即低语风格的克隆音频参数推荐值可调范围作用speakerdefault上表 9 个风格名控制情感/发声方式仅 EN 基础 TTS 支持speed1.0约 0.5~2.0语速内部换算为length_scale1/speedlanguageEnglishEnglish/Chinese决定使用哪个符号集与基础 TTS 文本管线tauconvert 内0.30~1音色混合强度值越接近 1 越贴近参考音色场景二跨语言克隆——中文参考音说英文或反过来两种做法对应 demo_part1.ipynb 的中文示例与 demo_part2.ipynb 的通用示例换官方中文基础 TTS加载checkpoints/base_speakers/ZHlanguageChinesesource_se换成zh_default_se.pth。参考音用中文 3 秒录音输出即为中文声音说中文或该音色中文韵律。任意语言基础 TTSdemo_part2 用 OpenAItts-1生成中间音频再走同一个convert()。这条路支持十几种语言代价是额外调用一个 TTS API并且需要自己保证源音色嵌入source_se与所用基础 TTS 匹配。V2 则原生覆盖英、西、法、中、日、韩六种语言基础 TTS 由 MeloTTS。场景三Gradio 界面与 V2 安装本地界面一条命令启动代码在 openvoice/openvoice_app.pypython -m openvoice_app --share # 会加载 EN/ZH 基础 TTS 转换器三个模型界面用 langid 自动检测输入文本语言文本上限 200 字符参考音频上传后自动走 VAD 切段提取嵌入。适合快速验证效果批量或定制流程还是建议直接调 API。V2 的安装比 V1 多两步pip install githttps://github.com/myshell-ai/MeloTTS.git # V2 的基础 TTS python -m unidic download # 日文分词词典日语合成必需checkpoint 放入checkpoints_v2/其中base_speakers/ses/目录已预存好各语言、各风格基础说话人的source_se不需要自己提取。V2 训练时用了更强的数据增强官方说法是鲁棒性和音质优于 V1——两个版本 API 完全一致迁移成本只是改加载路径。进阶调优参考音频选择与 tau音色相似度不理想时调优顺序建议是先换素材再动参数参考音频体检清单对照 docs/QA.md Bad Audio Quality一节无背景噪声、单一人声、无长静音、时长不短于数秒。一段 5 秒清晰的录音通常好过 30 秒带环境声的录音。tau 的取舍convert(tau0.3)是默认平衡点。调高如 0.5~0.7克隆更像但可能引入轻微音质损伤调低则更像基础 TTS 的原始音色。批量生产的工程化get_se返回的target_se可以torch.save成.pth复用同一说话人不同文本只需重复基础 TTS convert两步跳过切段和嵌入提取。合规底线ToneColorConverter默认启用水印enable_watermarkTrue公开服务场景不要为了省事关掉detect_watermark()可用于自检。换基础 TTS 的边界基础 TTS 越差中间音频的韵律越差转换器救不回来。集成自训基础 TTS 时先用它单独听一遍裸输出再进转换器。按场景选部署方式使用场景推荐方式优势局限快速评估效果本地 Gradioopenvoice_app免写代码可视化对比风格文本限 200 字符仅 EN/ZH研究/定制流水线直接调openvoice.api完全控制 source_se 与基础 TTS需要自己处理切分、缓存多语言内容生产V2 MeloTTS六语言原生支持音质更好多一步 MeloTTS 安装与词典下载对外产品集成API 水印 自训基础 TTS音色与合规可控工程量大需按 QA 调参资源导航官方使用文档含 V1/V2 安装与 checkpoint 下载说明docs/USAGE.md常见问题排查音质、语言支持、Silero 报错docs/QA.md示例风格控制 demo_part1.ipynb 跨语言 demo_part2.ipynb V2 多语言 demo_part3.ipynb核心源码API 层 openvoice/api.py、嵌入提取 openvoice/se_extractor.py、界面 openvoice/openvoice_app.py到这里你手里已经有了一套3 秒录音换音色的完整链路理解音色与韵律解耦的原理、跑通 V1 最小 demo、掌握风格与跨语言用法并知道效果不佳时该动素材还是动tau。下一步值得尝试的两个方向是把自训的基础 TTS 接进框架替换官方说话人以及用 V2 水印做小范围的真实用户验证。【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考