OpenVoice 秒级语音克隆实战指南:5 分钟用一段录音复刻任何人的声音

发布时间:2026/9/1 21:34:51

OpenVoice 秒级语音克隆实战指南:5 分钟用一段录音复刻任何人的声音
OpenVoice 秒级语音克隆实战指南5 分钟用一段录音复刻任何人的声音【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice假设你要给一部播客做多语言版本还希望每个版本都用同一个主播的声音朗读——传统做法是重新配音而 OpenVoice 是 MIT 与 MyShell 开源的秒级语音克隆工具喂给它 10 秒左右的参考录音它就能借到这个人的音色让任意语言的 TTS 输出都听上去是同一个人在说话。整篇文章按先跑通、再搞懂、后调优的顺序展开面向初中级开发者。三步跑通第一次克隆V2 全流程我们的目标是用你手边的一段录音生成一条用这个人的声音念中文的音频。全程约 5 分钟GPU 可选CPU 能跑就是慢。先准备好环境。注意官方锁定了不少依赖版本比如 numpy1.22.0所以务必用 Python 3.9 建独立环境高版本 Python 装依赖大概率翻车conda create -n openvoice python3.9 conda activate openvoice git clone https://gitcode.com/GitHub_Trending/op/OpenVoice cd OpenVoice pip install -e .接着下载 V2 模型权重解压到项目根目录下的checkpoints_v2文件夹官方安装说明 docs/USAGE.md 里附了下载地址unzip checkpoints_v2_0417.zip -d checkpoints_v2V2 的基础 TTS 由同门的 MeloTTS 提供还需补两个依赖这一步会顺带下载日语词典pip install githttps://github.com/myshell-ai/MeloTTS.git python -m unidic download然后是一段能一次跑完全流程的代码保存成clone_demo.py直接运行即可import os import torch from melo.api import TTS from openvoice import se_extractor from openvoice.api import ToneColorConverter device cuda:0 if torch.cuda.is_available() else cpu out_dir outputs_v2 os.makedirs(out_dir, exist_okTrue) # 1. 加载音色转换器V2 权重 converter ToneColorConverter(checkpoints_v2/converter/config.json, devicedevice) converter.load_ckpt(checkpoints_v2/converter/checkpoint.pth) # 2. 从参考录音提取音色指纹 target_se内部会自动做 VAD 人声切分 target_se, _ se_extractor.get_se( resources/example_reference.mp3, converter, vadTrue ) # 3. 基础说话人MeloTTS 中文模型src_se 必须和实际用的说话人配对 model TTS(languageZH, devicedevice) spk_ids model.hps.data.spk2id src_id list(spk_ids.keys())[0] src_se torch.load( fcheckpoints_v2/base_speakers/ses/{src_id.lower().replace(_, -)}.pth, map_locationdevice, ) # 4. 先让基础 TTS 出声再换掉里面的音色 text 你好这是一段用 OpenVoice 克隆出来的语音。 model.tts_to_file(text, spk_ids[src_id], f{out_dir}/base.wav, speed1.0) converter.convert( audio_src_pathf{out_dir}/base.wav, src_sesrc_se, tgt_setarget_se, output_pathf{out_dir}/cloned_zh.wav, ) print(done -, f{out_dir}/cloned_zh.wav)跑完后听cloned_zh.wav内容和发音是 MeloTTS 生成的标准普通话但音色已经被搬成了参考录音里那个人的。这里有两处新手最容易踩的点先打预防针src_se必须和实际使用的基础说话人一一对应。转换器做的事不是凭空加音色而是把基础说话人的音色特征 A 替换成目标特征 BA 填错了输出音色就会跑偏。每段生成音频默认都带隐形水印。转换器通过message参数把文本编码进音频里方便溯源不需要水印时可以初始化时关闭enable_watermarkFalse。它是怎么工作的先分家再融合整条流水线可以拆成一唱一换两个角色基础说话人 TTSV1 自带模型 / V2 用 MeloTTS负责唱什么——文本变成带口音、情感、节奏、音高的语音。这部分完全不受克隆影响。音色转换器converter负责谁来唱——只动音色不碰其他属性。打个比方录音棚里乐手、编曲、情绪都是现成的基础 TTSOpenVoice 做的只是把主唱的声音换成你指定的人和声、鼓点、演唱情绪一律保留。这也解释了它的招牌能力之一——跨语言克隆参考音频是英语输出却是中文因为唱词和嗓音本来就没绑在一起。再看图里的关键组件组件做什么为什么这样设计Tone color extractor音色提取器把参考录音切成多段每段过ref_enc编码器得到一个 256 维音色向量再求平均多段平均能抹掉单句话的情感波动留下稳定的音色底色抗噪更稳Flow流匹配转换器在频谱特征空间做 A→B 的音色迁移流匹配对复杂分布建模比传统 GAN 稳定训练收敛快、细节不糊IPA 对齐特征转换前先把不同语言的音素在国际音标层面对齐英中日的音素表完全不同先对齐到 IPA 才能跨语言只换音色Encoder/Decoder把迁移后的频谱还原成波形复用 VITS 系架构音质有保障提取流程的源码在 openvoice/se_extractor.pyvadTrue时用 Silero VAD 把人声段挑出来、去掉静音再均分成约 10 秒的片段每个片段出一个向量最后torch.stack(gs).mean(0)平均。想看懂音色转换的数学细节可以翻 openvoice/transforms.py 里的SpectralTransformer。V1 和 V2 的关系一句话说明白V2 换了一套更激进的增强训练策略音色更自然并且原生内置多语言基础说话人不用你自己凑 TTS。两版都能商用MIT 协议。按场景实战风格化、多语言、批量跑通基础流程后下面三个场景按难度递进每个都给出可运行代码和关键参数说明。场景 A同一人多种情绪和语气V1 风格库V1 的英文基础说话人自带一组风格槽位default / friendly / cheerful / excited / sad / angry / terrified / shouting / whispering。每个风格槽位有自己专属的src_se文件这是新手最容易漏的一步。完整示例参考 demo_part1.ipynb。import torch from openvoice.api import BaseSpeakerTTS, ToneColorConverter device cuda:0 if torch.cuda.is_available() else cpu # V1 权重checkpoints/ 下下载地址同样在 docs/USAGE.md 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) # 参考音色只提取一次多风格复用 from openvoice import se_extractor target_se, _ se_extractor.get_se(resources/example_reference.mp3, converter, vadTrue) styles [ (default, checkpoints/base_speakers/EN/en_default_se.pth, 1.0), (cheerful, checkpoints/base_speakers/EN/en_style_se.pth, 1.1), (whispering, checkpoints/base_speakers/EN/en_style_se.pth, 0.9), ] text This is an OpenVoice style demo. for style, se_path, speed in styles: base.tts(text, tmp.wav, speakerstyle, languageEnglish, speedspeed) converter.convert(tmp.wav, src_setorch.load(se_path, map_locationdevice), tgt_setarget_se, output_pathfout_{style}.wav)参数含义speaker选择风格槽位决定情感/语气cheerful和whispering共用en_style_se.pth即可speed内部换算成length_scale 1/speed1.2就是 1.2 倍速languageV1 基础模型只认English和Chinese两个入口。场景 B一段参考音念出六种语言V2V2 的多语言不是靠转换出来的而是靠 MeloTTS 覆盖六种语言、每种语言还有多个不同口音的基础说话人。同一份target_se可以无限制复用。完整写法见 demo_part3.ipynb核心循环如下from melo.api import TTS from openvoice.api import ToneColorConverter import torch converter ToneColorConverter(checkpoints_v2/converter/config.json, devicedevice) converter.load_ckpt(checkpoints_v2/converter/checkpoint.pth) target_se, _ se_extractor.get_se(resources/example_reference.mp3, converter, vadTrue) samples { 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: 在这次旅程中我们计划去巴黎欣赏埃菲尔铁塔。, JP: 彼は毎朝ジョギングをして体を健康に保っています。, KR: 안녕하세요! 오늘은 날씨가 정말 좋네요., } for lang, text in samples.items(): model TTS(languagelang, devicedevice) # 基础 TTS 按语言加载 spk model.hps.data.spk2id key list(spk.keys())[0] se torch.load( fcheckpoints_v2/base_speakers/ses/{key.lower().replace(_, -)}.pth, map_locationdevice) model.tts_to_file(text, spk[key], tmp.wav, speed1.0) converter.convert(tmp.wav, src_sese, tgt_setarget_se, output_pathfout_{lang}.wav)两个值得知道的细节换language参数就等于换了整套基础说话人target_se完全不用动——这就是音色与语言解耦的实际收益想要特定口音比如英式、澳式、印度英语把key换成spk2id里对应的说话人即可src_se文件名跟着换。场景 C把一整本书克隆成同一个人批量 并发长文本直接喂 TTS 容易超时且不好管理实用做法是先按句切好、逐句生成再拼接。下面这个脚本读一个lines.txt一行一句多线程批量出片import os from concurrent.futures import ThreadPoolExecutor import torch from melo.api import TTS from openvoice.api import ToneColorConverter device cuda:0 if torch.cuda.is_available() else cpu converter ToneColorConverter(checkpoints_v2/converter/config.json, devicedevice) converter.load_ckpt(checkpoints_v2/converter/checkpoint.pth) target_se, _ se_extractor.get_se(resources/example_reference.mp3, converter, vadTrue) model TTS(languageEN, devicedevice) spk model.hps.data.spk2id key list(spk.keys())[0] src_se torch.load(fcheckpoints_v2/base_speakers/ses/{key.lower()}.pth, map_locationdevice) def one_line(idx, sentence, out_dir): base_path, final_path f{out_dir}/b{idx}.wav, f{out_dir}/s{idx:04d}.wav model.tts_to_file(sentence, spk[key], base_path, speed1.0) converter.convert(base_path, src_sesrc_se, tgt_setarget_se, output_pathfinal_path) os.makedirs(batch_out, exist_okTrue) with open(lines.txt, encodingutf-8) as f: lines [l.strip() for l in f if l.strip()] # GPU 上线程数别开太大4 条左右即可 with ThreadPoolExecutor(max_workers4) as pool: pool.map(lambda i: one_line(i, lines[i], batch_out), range(len(lines)))生成后可以用pydub.AudioSegment按文件名排序拼接成整轨。如果要在公开服务里用保留水印参数message你的署名这是官方对防滥用的建议。遇到问题怎么办报错、不像、调不好安装和运行期的高频报错pip install -e .卡在 numpy / gradio 编译十有八九是 Python 版本不对。官方环境锁的是 Python 3.9numpy1.22.0在 3.11 上没有预编译包。调用get_se时卡在 Silero 模型下载se_extractor依赖 Silero VAD它要从网络拉取模型。机器没网时手动下载官方 FAQ docs/QA.md 里提到的压缩包解压到~/.cache/torch/hub/snakers4_silero-vad_master目录即可。assert num_splits 0, input audio is too shortVAD 切完人声后连 1 秒都不到参考音频太短或噪音太大。换 5~15 秒的干净单人录音重试。显存吃紧MeloTTS 推理本身不大主要是 Whisper/Silero 预处理占内存CPU 上跑get_se会明显变慢建议 GPU 提取一次se.pth后缓存复用extract_se支持se_save_path存盘。本地 Gradio 界面V1 附了极简网页 demo安装好 V1 权重后执行python -m openvoice_app --share即可在浏览器里上传参考音频试听出问题先翻 demo_part1.ipynb 和 docs/QA.md。声音不像的正确排查思路这是社区问得最多的一类问题官方 FAQ 给过明确答案OpenVoice 只克隆音色tone color不克隆口音和情感。输出的口音、情绪、节奏全部来自基础说话人 TTS。所以想让输出带英式口音去换英式口音的基础说话人而不是指望从参考音频里吸过来想让输出更激动换cheerful / excited风格槽位或换一个情感更足的基础说话人。排查清单按命中率排序参考音频是否干净——有背景音、多人说话、大段静音都会污染音色向量参考音频是否够长——太短则向量不稳官方建议 5 秒以上、10 秒左右最稳文件名是否与旧缓存撞车——processed/目录按文件名缓存已提取的se.pth同名文件复用时会直接加载旧向量。改换参考音但忘了清理缓存是怎么调都不像的最隐蔽原因src_se是否和当前基础说话人严格配对见场景 A 的坑V2 训练时用了更强的数据增强同一参考音下 V2 通常比 V1 更像条件允许优先 V2。关键参数速查参数推荐值影响speed0.9 ~ 1.2基础 TTS 的语速内部换算为length_scale1 变快speaker/ 说话人 key按需决定情感、语气、口音换它就要同步换src_sevadget_seTrueSilero 切人声False 改走 Whisper 切句需 CUDA fp16tauconvert默认 0.3音色融合强度调大会让音色替换更彻底也可能牺牲自然度messageconvert建议填署名写入音频隐形水印便于溯源参考音频5~15s 单人干净录音决定target_se质量上限怎么调参都补不回来能用在哪些地方有声书与播客的多语言发行。同一个主播的声音覆盖全部语种听众换语言不换人品牌感统一。给机器人和助手换上指定的人声。OpenVoice 的克隆能力已经嵌进 myshell.ai 的 Workshop创建 Bot 后在语音设置里通过克隆功能生成自定义声音再绑定到机器人上。快速体验 TTS 模型选型。如果暂时不需要克隆、只是想试听各家 TTS 音色可以在 Widget Center 的 TTS 分类里直接点选不同语言、不同模型的声音试听选定了再回头做克隆。无障碍阅读。把文档朗读换成本人/家属的声音长时间听读更不疲劳语速建议放在 1.0~1.1配合default风格最耐听。合规提醒克隆他人声音用于公开发布前请确认你已获得授权。保留水印、填好message署名是对自己和被克隆者都负责的做法。进阶路线与资源学习节奏建议分四步走跑通完成本文三步跑通听出像和不像的差异控风格把场景 A 的风格槽位全部生成一遍建立对speaker/speed/src_se三者的肌肉记忆上规模用场景 C 的批量脚本处理真实语料顺手研究 openvoice/models.py 里voice_conversion的推理链路造轮子给冷门语言自训一个基础说话人 TTS 接进来转换器不用动或者把水印检测能力接进你的发布管线。常用入口官方安装说明docs/USAGE.md官方 FAQ质量、语言、安装三大类docs/QA.md示例代码风格控制 demo_part1.ipynb、跨语言 demo_part2.ipynb、V2 多语言多口音 demo_part3.ipynb核心模块API 入口 openvoice/api.py、音色提取 openvoice/se_extractor.py把一段 10 秒的录音变成可复用的声音资产这就是 OpenVoice 的全部魔法——剩下的事就看你想让它念多少种语言了。【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Vue+SpringBoot图书管理系统源码解析与期末答辩指南

Vue+SpringBoot图书管理系统源码解析与期末答辩指南

2026/9/1 21:34:51

简介:本资源是一套完整的VueSpringBoot图书管理系统源码及配套数据库文件,专为计算机专业本科生期末大作业或Java全栈入门实践设计,解决传统图书管理效率低、前后端耦合度高、缺乏现代Web开发范式参考等问题。压缩包共92个文件,含…

Python自动化解析CANoe BLF日志:批量提取UDS诊断NRC否定响应码

Python自动化解析CANoe BLF日志:批量提取UDS诊断NRC否定响应码

2026/9/1 21:34:51

如果你是一名汽车电子工程师,或者正在从事车载网络诊断测试,那么你一定对海量的CANoe报文日志文件(.blf格式)感到头疼。面对动辄几个GB的BLF文件,当测试经理或客户要求你“找出所有包含特定NRC(否定响应码&…

B站游戏测试笔试题解析:用例设计与测试思维突围

B站游戏测试笔试题解析:用例设计与测试思维突围

2026/9/1 21:34:51

前阵子有学弟问我:“B站游戏测试笔试题到底长什么样?”我一下就想起来当年在招聘网站上刷到的那份《哔哩哔哩2020校园招聘游戏测试笔试卷(二)》。那时候游戏测试岗位还远没有现在这么热,网上能搜到的面试题也不像现在这…

前端面试高频100题知识地图:从事件循环到Vue响应式原理

前端面试高频100题知识地图:从事件循环到Vue响应式原理

2026/9/1 22:54:54

前端面试八股文这两年几乎成了每个前端人的必经关卡。不管你是刚刷完基础准备投简历的应届生,还是工作两三年想跳槽的进阶开发,打开招聘软件先看到的永远是那几道高频题:事件循环输出顺序、闭包内存泄漏、浏览器缓存、Vue 响应式原理。这套东…

RAG系统从入门到工程落地:概念、架构与效果评估

RAG系统从入门到工程落地:概念、架构与效果评估

2026/9/1 22:54:54

很多人在学习 AI 与 LLM 工程时都会遇到一个奇怪的分割线:看视频课觉得什么都懂了,一动手写代码就卡在第一步。尤其是 RAG(Retrieval-Augmented Generation,检索增强生成)相关的内容,课程标题往往很大——比…

AI Agent五大核心设计模式:从反思链到多智能体协作的工程实践

AI Agent五大核心设计模式:从反思链到多智能体协作的工程实践

2026/9/1 22:54:54

1. 先搞清楚AI Agent设计模式到底在解决什么问题如果你正在接触AI Agent开发,或者想从零开始搭建一个能自主处理任务的智能体,最头疼的往往不是写代码,而是不知道从何下手。网上资料要么是抽象的理论,要么是零散的代码片段&#x…

MKVToolNix 从入门到精通:无损合并视频、处理多音轨字幕与批量操作指南

MKVToolNix 从入门到精通:无损合并视频、处理多音轨字幕与批量操作指南

2026/9/1 22:54:54

在实际处理视频素材、封装多音轨字幕、合并剪辑片段或制作个人影音收藏时,我们经常需要一款功能强大且免费的工具来处理 MKV 等容器格式。网上虽然有很多“一键合并”的软件,但往往功能单一、带有水印,或者对复杂的音轨、字幕流处理不佳。MKV…

前端八股文:从背题到构建知识体系的进阶路线

前端八股文:从背题到构建知识体系的进阶路线

2026/9/1 22:54:54

最近我收到的私信里,出现频率最高的一个词,就是“前端八股文”。有人吐槽说前端面试已经卷到背题库了,还有人焦虑地问八股文到底还要不要背,更有人直接把我之前写的面试总结打印出来,问我“这份背完能不能进大厂”。这…

都2026年了,还在问网络安全怎么入门,气得我当场脑血栓发作

都2026年了,还在问网络安全怎么入门,气得我当场脑血栓发作

2026/9/1 22:44:54

前言 本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。 正题 首先,…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/1 1:53:39

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/1 9:55:14

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/8/31 17:18:46

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

远程协作的工作台整理

远程协作的工作台整理

2026/9/1 0:03:36

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/1 0:03:36

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/1 0:03:36

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

远程协作的工作台整理

远程协作的工作台整理

2026/9/1 0:03:36

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/1 0:03:36

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/1 0:03:36

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…