news 2026/9/1 10:39:16

OpenVoice:让任意文本拥有你的声音,本地即时语音克隆三步跑通

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenVoice:让任意文本拥有你的声音,本地即时语音克隆三步跑通

OpenVoice:让任意文本拥有你的声音,本地即时语音克隆三步跑通

【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice

当你需要一段用"某个人嗓音"读出来的旁白,又不想亲自进录音棚——OpenVoice 做的就是即时语音克隆:用几秒参考音频提取音色,再用这个音色朗读任意文本,且支持零样本跨语言。它是 MIT 与 MyShell 开源的音频基础模型,V1/V2 均为 MIT 协议。本文带你把本地部署和第一个克隆效果跑起来。

🚀 语音克隆的最短路径跑通

目标:5 分钟拿到一个 Web 页面,上传几秒录音、输入文字,听到克隆结果。

  1. 建环境并安装。Python 3.9(setup.py要求>=3.9),一条链装完:
conda create -n openvoice python=3.9 conda activate openvoice git clone https://gitcode.com/GitHub_Trending/op/OpenVoice cd OpenVoice pip install -e .

-e安装会带齐 librosa、faster-whisper、gradio 等依赖(见requirements.txt)。

  1. 放模型权重。V1 含中英 base speaker 加 converter,V2 音色质量更好且原生支持六种语言。下载对应的 checkpoint 压缩包(V1 为checkpoints_1226.zip,V2 为checkpoints_v2_0417.zip),解压到项目根目录的checkpoints/(V2 解到checkpoints_v2/),下载地址见 docs/USAGE.md。模型权重不在仓库里,这步不能省。

  2. 启动本地 Web 服务:

python -m openvoice_app

openvoice_app.py是 Gradio 演示,启动时会一次性加载 EN/ZH 两个 base speaker 和 converter。打开终端打印的本地地址,输入文本、选风格、上传参考音频(可直接用仓库里的resources/demo_speaker1.mp3试听),点 Send 就出结果。

不想本地部署的话,MyShell 官方平台有在线语音克隆工作坊,流程如下图:

如果想在自己的代码里用,最小脚本长这样(V1 英文):

import torch from openvoice import se_extractor from openvoice.api import BaseSpeakerTTS, ToneColorConverter device = "cuda:0" if torch.cuda.is_available() else "cpu" base_tts = BaseSpeakerTTS('checkpoints/base_speakers/EN/config.json', device=device) base_tts.load_ckpt('checkpoints/base_speakers/EN/checkpoint.pth') conv = ToneColorConverter('checkpoints/converter/config.json', device=device) conv.load_ckpt('checkpoints/converter/checkpoint.pth') target_se, _ = se_extractor.get_se('my_reference.mp3', conv, vad=True) base_tts.tts('这是OpenVoice语音克隆演示。', 'tmp.wav', speaker='default', language='English') conv.convert(audio_src_path='tmp.wav', src_se=torch.load('checkpoints/base_speakers/EN/en_default_se.pth').to(device), tgt_se=target_se, output_path='output.wav', message='@MyShell')

四步:建两个模型、提一次音色向量、TTS 生成中间音频、converter 换音色。

⚙️ 语音克隆是怎么工作的:音色与风格分离

为什么拆成两个模型?因为"谁在说"(音色)和"怎么说"(情感、口音、语速)是互相独立的维度。混在一个模型里,换个情绪就得重新克隆一次声音。OpenVoice 的拆法:Base Speaker TTS 负责"怎么说",音色转换器(Tone Color Converter)只负责把"谁在说"换掉。好处是零样本跨语言——converter 与语言无关,参考音频和目标文本可以是不同语言(README 三大特性之一)。

输入→处理→输出的链条:

  • 输入,两路并行:文本带着风格参数(用哪个说话人、哪种情绪)进 Base Speaker TTS;几秒参考音频进音色提取器。参考音频先过 VAD(voice activity detection,语音活动检测,作用是把人声从音频里切出来、去掉静音),extract_se()对每段提取的音色向量取平均,压成单个音色向量 se(speaker embedding,白话:这段声音"像谁"的数学表示)。
  • 处理:TTS 先合成一段"默认嗓音"的中间音频。converter 把它和参考音色编码到同一特征空间,在 IPA(国际音标)对齐的中间特征上做替换。对齐意味着两路音频的音素内容被锁定,只换音色相关特征。
  • 输出:解码器合成波形,并按默认加一层音频水印(wavmark,由message参数标记内容)——demo 里传message='@MyShell'就是写进波形里的标识。

这个拆分对效果的意义:情感和口音完全由 base speaker 决定,converter 不碰它们。所以"换情绪不用重新提取音色"是设计使然;反过来,参考音频里没有的情绪也克隆不出来,后文踩坑处会展开。

🎛️ 语音克隆效果调优

按"我想要的效果"组织,每个只给关键开关。

想换情绪/口音:不动 converter,改BaseSpeakerTTS.tts()speaker参数。英文支持 9 种风格:default、whispering、cheerful、excited、sad、angry、terrified、shouting、friendly(选项清单见openvoice_app.py第 86 行)。中文 base speaker 目前只有 default(同文件第 71 行)。

想快一点或慢一点tts()speed参数,默认 1.0,代码里以length_scale=1/speed传给模型(api.py第 91 行),1.2 就是加快 20%。

想音色更像参考音频convert()tau参数,默认 0.3,控制目标音色替换强度。克隆"不够像"时从这里和参考音频质量两边同时查。

想要更高音质:换 V2 权重,ToneColorConverter改加载checkpoints_v2/converter。README 明确 V2 采用不同训练策略、音质更好。

想省资源get_se(vad=True)走 Silero VAD 切分,不加载额外大模型;vad=False会走 faster-whisper 的 medium 模型做对齐,需要 GPU 且首次要下载 Whisper 模型(se_extractor.py第 143-146 行)。保持默认 True 即可。

不想加水印:构造 converter 时传enable_watermark=Falseapi.py就不会加载 wavmark 模型。

🧩 进阶玩法:如何做多语言语音克隆

玩法一:跨语言——英文参考音频说中文

  • 需求:参考录音是英文,产出要中文。
  • 思路:音色向量和 base speaker 各司其职。用 ZH base speaker 合成中文中间音频,再用同一个target_se替换音色,converter 环节一行不改。
  • 关键配置:BaseSpeakerTTS路径换成checkpoints/base_speakers/ZHsrc_se加载zh_default_se.pthopenvoice_app.py第 32 行就是这个用法),tts()language='Chinese'
  • 注意:带过去的只有音色,口音和情感继承自中文 base speaker。这是 docs/QA.md 写明的设计边界,不是 bug。完整示例看demo_part2.ipynb

玩法二:V2 + MeloTTS——原生六种语言

  • 需求:V1 只有 EN/ZH 两个 base speaker,你想要英、西、法、中、日、韩原生支持(README 的 V2 特性)。
  • 思路:用 MeloTTS 充当 base speaker。V2 checkpoint 在checkpoints_v2/base_speakers/ses/目录为每个 MeloTTS 说话人预存了配套的source_se,循环" MeloTTS 合成 + convert 换音色"即得同一音色多语言结果。
  • 关键配置:按 docs/USAGE.md 的 V2 章节安装 MeloTTS,跑python -m unidic download准备日语分词;converter 加载checkpoints_v2/converter
  • 注意:source_se必须与所用 MeloTTS 说话人一一对应,配错会导致中间音频音色和向量不匹配、听感漂移。完整脚本见demo_part3.ipynb

⚠️ 语音克隆踩坑预警

现象:生成语音的情绪/口音和参考音频不一样原因:OpenVoice 只克隆音色,不克隆情绪和口音,这两项由 base speaker 决定(QA.md 明确说明)。 解法:接受 base speaker 的风格,或换成带该口音的 base speaker 模型。

现象:首次跑get_se报 Silero 下载失败原因:vad=True路径的get_vad_segments首次运行要从 GitHub 拉 silero-vad 模型,网络受限时直接挂。 解法:手动下载 silero-vad 的 zip,解压到~/.cache/torch/hub/snakers4_silero-vad_master(QA.md 安装一节)。

现象:参考音频换了,出来的音色还是旧的原因:se 提取结果按"文件名+内容哈希"落在processed/目录,同名音频会命中旧缓存(demo_part1.ipynb 有专门提醒)。 解法:给参考音频改个文件名,或清掉processed/重新提取。

现象:报 "input audio is too short",或音质差原因:VAD 切分要求人声段足够长(se_extractor.py有断言);背景噪声、多人说话、长静音都会污染音色向量(QA.md 音质一节列了四项检查)。 解法:用干净、单人、人声连续的音频,避开长静音。

现象:Gradio 页面拒绝输入原因:demo 限制文本 2-200 字符,且只认 zh/en 两种语言(openvoice_app.py第 97-114 行)。 解法:长文本直接走BaseSpeakerTTS的 API,它会自动按句切分后逐句合成。

📚 接下来去哪

  • 安装细节与 V1/V2 checkpoint 下载:docs/USAGE.md
  • 音质、多语言、Silero 问题排查:docs/QA.md
  • 三个递进示例:demo_part1.ipynb(风格控制)、demo_part2.ipynb(跨语言)、demo_part3.ipynb(V2 多语言)
  • 核心源码:openvoice/api.py(TTS 与音色转换两个类)、openvoice/se_extractor.py(参考音频预处理)

OpenVoice 是 MIT 协议的即时语音克隆基础模型:音色可克隆、风格可控、语言可换,替换 base speaker 即可适配任意语言场景。

【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 10:37:24

python的图论工业场景模拟第三十七篇:任务资源冲突着色(最少时间段排产),任务:抢夺同一设备的工序连边,用最少的颜色涂色,颜色数即最少班次,图建模说明:无向冲突图,节点=任务,边=冲突,nx.gr

任务资源冲突着色:抢夺同一设备的工序,最少用几个班次排完?"车间有 6 台 CNC、12 道加工工序。调度员排产时,两道工序抢同一台设备——不能同时干,只能一先一后。他拿 Excel 手工分早班/晚班/夜班,排了…

作者头像 李华
网站建设 2026/9/1 10:36:39

Java实现停车场管理系统:从车牌识别到计费全解析

无法基于该标题生成 CSDN 技术教程。该主题属于责任认定与赔偿纠纷范畴,需要警方、保险、司法等权威认定。建议提供技术类具体主题,例如“Java 停车场管理系统”“车辆定位与轨迹存储”“行车记录视频截取与取证工具”等,我可以继续输出完整的…

作者头像 李华
网站建设 2026/9/1 10:32:54

用语义搜索为视频建立自然语言索引:以GTA6宣传片为例

最近在 Hacker News 上看到一个很有想法的动手项目:有人专门为 GTA 6 的 Extended Look 宣传视频构建了一套语义搜索系统,用户不需要记住原片中的具体台词或描述,而是用一句自然语言就能找到对应的画面片段、字幕内容和时间戳。这类“给视频做…

作者头像 李华
网站建设 2026/9/1 10:31:56

CyberChef:数据加解密与分析的终极瑞士军刀

CyberChef:数据加解密与分析的终极瑞士军刀 【免费下载链接】CyberChef The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis 项目地址: https://gitcode.com/GitHub_Trending/cy/CyberChef 面对一堆看不懂的 …

作者头像 李华
网站建设 2026/9/1 10:30:37

Linux Command 速查完整指南:免费 Linux 命令查询工具与自部署教程

Linux Command 速查完整指南:免费 Linux 命令查询工具与自部署教程 【免费下载链接】linux-command Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux 项目地址: https://gitcode.com/GitHub_Trending/linux/lin…

作者头像 李华