
OpenVoice 即时声音克隆实战指南从 V1 风格控制到 V2 原生多语言克隆【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoiceOpenVoice 是 MIT 与 MyShell 联合开源的即时声音克隆Instant Voice Cloning音频基础模型只需一段参考音频即可复刻该说话人的音色并以该音色合成多种语言、多种风格的语音。本文基于仓库 README 与配套使用文档覆盖 V1/V2 版本的核心能力、Linux 安装步骤、基音说话人Base Speaker与音色转换器Tone Color Converter的调用方式、V2 多语言支持以及官方 QA 中总结的常见问题排查方法帮助读者从零完成本地部署并深入理解其源码实现。一、OpenVoice 能做什么V1 与 V2 的能力边界README 将 OpenVoice 的优势概括为三个方面这也是理解整个仓库设计的关键精确的音色克隆Accurate Tone Color CloningOpenVoice 能精确复刻参考音频的音色tone color并支持以该音色生成多种语言和口音的语音。灵活的语音风格控制Flexible Voice Style Control可以细粒度控制情绪、口音等风格以及节奏、停顿、语调rhythm, pauses, intonation等风格参数。零样本跨语言克隆Zero-shot Cross-lingual Voice Cloning生成语音的语言、参考语音的语言都不需要出现在大规模多说话人多语言MSML训练集中。V1 的三点优势在 README.md 的 Introduction 中定义而 2024 年 4 月发布的V2在保留 V1 全部能力的基础上README 明确列出了三项增强更好的音频质量V2 采用了不同的训练策略demo_part3.ipynb 中表述为“more aggressive augmentations”即更强化的数据增强从而在部分场景下具有更好的鲁棒性原生多语言支持英语、西班牙语、法语、中文、日语、韩语六种语言原生支持免费商用自 2024 年 4 月起V1 与 V2 均以 MIT 协议发布商业与科研使用均免费详见 LICENSE。一个重要的使用前提来自 docs/QA.md 的 General CommentsOpenVoice 是技术而非成品产品其目标用户是开发者与研究人员而不是期望“开箱即完美”的终端用户。QA 文档同时强调OpenVoice 只克隆参考说话人的音色不会克隆口音和情绪——口音与情绪由基音说话人 TTS 模型决定。理解这一分工是后面所有用法的基础。二、架构原理Base Speaker Tone Color Converter 两阶段流水线从源码结构看OpenVoice 的推理链路由 openvoice/api.py 中的两个类构成BaseSpeakerTTS负责“用某个基音说话人的声音朗读文本”ToneColorConverter负责“把朗读结果的音色转换到目标说话人”。2.1 基音说话人BaseSpeakerTTSBaseSpeakerTTSopenvoice/api.py内部是一个标准的 VITS 类合成器SynthesizerTrn构造时从config.json读取超参并实例化模型class OpenVoiceBaseClass(object): def __init__(self, config_path, devicecuda:0): hps utils.get_hparams_from_file(config_path) model SynthesizerTrn( len(getattr(hps, symbols, [])), hps.data.filter_length // 2 1, n_speakershps.data.n_speakers, **hps.model, ).to(device) model.eval()其tts()方法的关键逻辑def tts(self, text, output_path, speaker, languageEnglish, speed1.0): mark self.language_marks.get(language.lower(), None) # 语言标记 EN / ZH ... t f[{mark}]{t}[{mark}] # 文本包裹语言标记 ... audio self.model.infer(x_tst, x_tst_lengths, sidsid, noise_scale0.667, noise_scale_w0.6, length_scale1.0 / speed)[0][0, 0]可以推断三个要点语言通过[EN]/[ZH]标记嵌入文本序列language_marks目前只有 english→EN、chinese→ZH 两种见 openvoice/api.pyspeaker参数选择检查点内预置的说话人 idself.hps.speakers[speaker]这就是 V1 风格控制的实现入口——checkpoint 中预置了不同风格对应的说话人 idspeed通过length_scale1.0/speed作用于时长预测实现语速控制。noise_scale0.667、noise_scale_w0.6是官方在 API 层固化的采样随机性参数分别影响音质扰动与韵律扰动对应 openvoice/models.py 中infer()的z_p m_p randn * exp(logs_p) * noise_scale与时长采样。2.2 音色转换ToneColorConverter 与 voice_conversionToneColorConverteropenvoice/api.py与基音说话人共用SynthesizerTrn模型类但n_speakers0因此模型内部不构建文本编码器而是构建ReferenceEncoderref_enc见 openvoice/models.py用于从参考频谱提取音色嵌入。核心转换逻辑在 openvoice/models.pydef voice_conversion(self, y, y_lengths, sid_src, sid_tgt, tau1.0): g_src sid_src g_tgt sid_tgt z, m_q, logs_q, y_mask self.enc_q(y, y_lengths, g..., tautau) # 后验编码器 z_p self.flow(z, y_mask, gg_src) # 正向 flow 对齐源音色 z_hat self.flow(z_p, y_mask, gg_tgt, reverseTrue) # 逆向 flow 注入目标音色 o_hat self.dec(z_hat * y_mask, gg_tgt) # HiFi-GAN 声码器 return o_hat, y_mask, (z, z_p, z_hat)即把源音频编码到潜在空间 → 用归一化流Normalizing Flow变换到语言潜变量z_p携带韵律、内容等与音色解耦的信息→ 逆向流中注入目标说话人的音色条件g_tgt再经声码器dec重建音频。tau是后验编码器PosteriorEncoder的采样温度默认convert(tau0.3)见 openvoice/api.py控制重建时对后验分布的采样随机程度。extract_se()方法openvoice/api.py展示了音色嵌入的提取对参考音频做频谱分析后经ref_enc编码多段参考音频的嵌入取均值并可torch.save落盘复用。2.3 水印机制值得注意的工程细节ToneColorConverter构造时默认enable_watermarkTrue加载wavmark模型openvoice/api.pyconvert()结束后会调用add_watermark()把message官方 Gradio 示例中为MyShell的位串按 16000 采样/32 bit 的块写入音频openvoice/api.py。官方 Gradio 应用即以此机制标记生成音频见 openvoice/openvoice_app.py。若不需要水印可传enable_watermarkFalse跳过。三、环境要求与安装V1 与 V2 通用按 docs/USAGE.md 的 Linux Install 章节OpenVoice 面向熟悉 Linux、Python 与 PyTorch 的开发者与研究者V1/V2 的安装方式相同conda create -n openvoice python3.9 conda activate openvoice git clone https://gitcode.com/GitHub_Trending/op/OpenVoice.git cd OpenVoice pip install -e .安装方式由 setup.py 定义包名为MyShell-OpenVoicepython_requires3.9依赖锁版本列表见 requirements.txt其中与运行强相关的包括依赖版本作用结合源码可确认librosa0.9.1音频读取与频谱分析api.py、se_extractor.pyfaster-whisper0.9.0Whisper 语音切分se_extractor.split_audio_whisperwhisper-timestamped1.14.2提供 Silero VAD 分段函数get_vad_segmentsse_extractor.split_audio_vadpydub0.25.1音频切片与导出wavmark0.0.3音频水印gradio3.48.0本地 Demo 界面pypinyin / jieba / cn2an-中文文本处理langid1.1.6Gradio Demo 中自动检测输入语言checkpoint 需从 docs/USAGE.md 中给出的官方下载地址获取V1 为checkpoints_1226.zipV2 为checkpoints_v2_0417.zip链接以该文档为准分别解压到checkpoints/和checkpoints_v2/目录。V1 解压后目录结构可从 openvoice/openvoice_app.py 的加载代码确认en_ckpt_base checkpoints/base_speakers/EN zh_ckpt_base checkpoints/base_speakers/ZH ckpt_converter checkpoints/converter ... en_base_speaker_tts BaseSpeakerTTS(f{en_ckpt_base}/config.json, devicedevice) en_base_speaker_tts.load_ckpt(f{en_ckpt_base}/checkpoint.pth) tone_color_converter ToneColorConverter(f{ckpt_converter}/config.json, devicedevice) tone_color_converter.load_ckpt(f{ckpt_converter}/checkpoint.pth)即每个模型由config.jsoncheckpoint.pth组成另有en_default_se.pth、en_style_se.pth、zh_default_se.pth等预提取的源音色嵌入文件。四、OpenVoice V1 用法V1 提供三类使用入口docs/USAGE.md 的 OpenVoice V1 章节4.1 灵活风格控制demo_part1.ipynbdemo_part1.ipynb 给出最小可运行的三步调用初始化 → 提取目标音色嵌入 → 基音 TTS 音色转换。import os, torch from openvoice import se_extractor from openvoice.api import BaseSpeakerTTS, ToneColorConverter # 1. 初始化 ckpt_base checkpoints/base_speakers/EN ckpt_converter checkpoints/converter device cuda:0 if torch.cuda.is_available() else cpu base_speaker_tts BaseSpeakerTTS(f{ckpt_base}/config.json, devicedevice) base_speaker_tts.load_ckpt(f{ckpt_base}/checkpoint.pth) tone_color_converter ToneColorConverter(f{ckpt_converter}/config.json, devicedevice) tone_color_converter.load_ckpt(f{ckpt_converter}/checkpoint.pth) # 2. 提取参考说话人音色嵌入target_se source_se torch.load(f{ckpt_base}/en_default_se.pth).to(device) # 基音说话人嵌入可直接加载 reference_speaker resources/example_reference.mp3 # 你想克隆的语音 target_se, audio_name se_extractor.get_se(reference_speaker, tone_color_converter, target_dirprocessed, vadTrue) # 3. 推理先 TTS再音色转换 text This audio is generated by OpenVoice. src_path outputs/tmp.wav base_speaker_tts.tts(text, src_path, speakerdefault, languageEnglish, speed1.0) tone_color_converter.convert( audio_src_pathsrc_path, src_sesource_se, tgt_setarget_se, output_pathoutputs/output_en_default.wav, messageMyShell)风格与语速由tts()的speaker与speed参数控制。从 openvoice/openvoice_app.py 的参数校验可见V1 英文基音说话人可用的风格取值为default、whispering、shouting、excited、cheerful、terrified、angry、sad、friendly。注意 demo_part1.ipynb 中的提醒se_extractor会以音频文件名为 key 保存提取的target_se且不会自动覆盖使用自己的参考音频时请确保文件名唯一这一点与 QA 中“忘记删除processed缓存目录”的问题直接相关。4.2 跨语言克隆demo_part2.ipynbdemo_part2.ipynb 演示 MSML 训练集中已见过与未见过语言的克隆效果。QA 文档补充了语言扩展策略docs/QA.md Issues with Languages 一节OpenVoice 支持任何语言前提是你拥有该语言的基音说话人 TTS 模型——音色转换器最难训练的部分官方已完成基音说话人模型相对容易训练可直接替换当前提供的基音说话人接入框架。4.3 本地 Gradio Demo启动命令docs/USAGE.mdpython -m openvoice_app --share--share参数定义在 openvoice/openvoice_app.py作用是将 Gradio 链接公开make link public。该 Demo 的主要交互约束均见 openvoice/openvoice_app.py 的predict函数支持语言仅中文、英文supported_languages [zh, en]用langid自动检测输入文本限制 200 字符以内Demo 限制非模型限制中文仅支持default风格英文支持上文列出的全部风格生成链路get_se提取目标音色 →tts合成临时音频 →convert转换并打上MyShell水印输出到outputs/output.wav。官方建议遇到 Gradio Demo 问题时先看 demo_part1/part2 与 docs/QA.md而非直接排查 Demo 本身。五、OpenVoice V2 用法MeloTTS 作为多语言基音说话人V2 的 checkpointcheckpoints_v2_0417.zip解压到checkpoints_v2/目录后按 docs/USAGE.md 还需安装多语言 TTS 库 MeloTTSpip install githttps://github.com/myshell-ai/MeloTTS.git python -m unidic downloadV2 的完整示例见 demo_part3.ipynb。其结构与 V1 类似但区别明显# 初始化只用 checkpoints_v2/converter tone_color_converter ToneColorConverter(checkpoints_v2/converter/config.json, devicedevice) tone_color_converter.load_ckpt(checkpoints_v2/converter/checkpoint.pth) # 提取目标音色嵌入source 嵌入直接来自 checkpoints_v2/ses 目录 target_se, audio_name se_extractor.get_se(resources/example_reference.mp3, tone_color_converter, vadTrue) # 使用 MeloTTS 作为基音说话人 from melo.api import TTS texts { EN_NEWEST: Did you ever hear a folk tale about a giant turtle?, ES: El resplandor del sol acaricia las olas..., FR: La lueur dorée du soleil caresse les vagues..., ZH: 在这次vacation中我们计划去Paris欣赏埃菲尔铁塔和卢浮宫的美景。, JP: ..., # 日语示例 # 韩语同理 }从源码结构看V2 复用同一套ToneColorConverter接口版本区分通过配置中的_version_字段传递openvoice/api.py并影响se_extractor的缓存目录命名openvoice/se_extractor.py。V2 原生支持的六种语言英语、西班牙语、法语、中文、日语、韩语由 MeloTTS 的基音模型覆盖USAGE 文档同时给出了 myshell.ai 上已部署的各语言在线服务入口英式/美式/印度/澳式英语、西语、法语、中文、日语、韩语供不安装环境直接体验。六、音色嵌入提取的内部流程se_extractorse_extractor.get_se()openvoice/se_extractor.py是克隆质量的守门员其内部流程值得了解因为 QA 中的多数“音质问题”根源都在这一步命名与缓存以文件名_版本_音频SHA256哈希前缀作为缓存 keyhash_numpy_array相同音频重复提取不会重算但换了内容而保留同名文件会导致缓存混淆——这正是 QA 中“同名参考音频忘记删除processed文件夹”问题的成因之一两种切分策略vadTrue默认split_audio_vad调用 Silero VAD 去静音后按split_seconds10.0均匀切段openvoice/se_extractor.pyvadFalsesplit_audio_whisper用 faster-whisper medium 模型转写并按词时间戳切分仅保留时长 1.5s~20s、转写文本 2~200 字符的高置信度片段openvoice/se_extractor.py多段均值各段频谱经ref_enc编码后在extract_se中取均值作为最终target_se。安装环境的一个已知坑docs/QA.md Issues with Installationsplit_audio_vad依赖的 Silero VAD 首次运行会从 github 下载snakers4/silero-vad到~/.cache/torch/hub/若机器无法访问 github下载会失败。解决办法是手动下载该 zip 并解压到~/.cache/torch/hub/snakers4_silero-vad_master目录。七、常见问题排查源自官方 QA以下为 docs/QA.md 的要点整理官方表示会持续更新该列表1. 生成语音的口音/情绪与参考语音不一致这是设计使然而非 bugOpenVoice 只克隆音色口音与情绪由基音说话人 TTS 模型决定技术细节见论文 arXiv:2312.01479。想改变口音或情绪需要换一个带该口音/情绪风格的基音说话人模型。**2. 生成语音音质差**按 QA 建议逐项检查参考音频是否干净、无背景噪音音频是否太短音频中是否混入了多个说话人参考音频是否包含较长空白段是否用了同名文件但忘记删除processed缓存文件夹**3. 想支持其他语言**参见 demo_part2.ipynb 的多语言与跨语言示例。只要有对应语言的基音说话人即可OpenVoice 团队已完成最难的部分音色转换器训练。4. 定位“技术 vs 产品”QA 开篇即声明OpenVoice 是“versatile instant voice cloning technical approach”不是开箱即用的完美产品在正确使用前提下它适用于大多数声音但不应期望所有 case 都完美。八、引用、许可与致谢许可证V1 与 V2 均为 MIT License商业与科研使用免费LICENSEREADME.md License 章节。引用如需引用本项目README 给出的 BibTeX 为article{qin2023openvoice, title{OpenVoice: Versatile Instant Voice Cloning}, author{Qin, Zengyi and Zhao, Wenliang and Yu, Xumin and Sun, Xin}, journal{arXiv preprint arXiv:2312.01479}, year{2023} }致谢README 声明本实现基于 TTScoqui-ai、VITSjaywalnut310、VITS2daniilrobnikov三个开源项目。社区贡献Windows 与 Docker 安装为社区非官方指南docs/USAGE.md 的 “Install on Other Platforms” 一节列出了贡献者指引README 的 Main Contributors 列出了 MIT、清华大学与 MyShell 四位主要贡献者。九、小结关键路径速查目标入口关键文件/目录V1 风格控制demo_part1.ipynbcheckpoints/base_speakers/{EN,ZH}、checkpoints/converterV1 跨语言克隆demo_part2.ipynb同上本地 Gradiopython -m openvoice_app --shareopenvoice/openvoice_app.pyV2 多语言demo_part3.ipynb MeloTTScheckpoints_v2/converter、checkpoints_v2/ses音色嵌入提取se_extractor.get_seopenvoice/se_extractor.py核心推理 APIBaseSpeakerTTS.tts/ToneColorConverter.convertopenvoice/api.py声学模型SynthesizerTrn.infer/voice_conversionopenvoice/models.py常见问题官方 QnAdocs/QA.md掌握“基音说话人合成 → 音色嵌入转换”这一两阶段范式后你可以按 QA 文档的建议替换任意语言的基音说话人模型把 OpenVoice 的零样本音色克隆能力扩展到任意语言场景。【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考