当前位置: 首页 > news >正文

OpenVoice 语音克隆实战:从一段10秒参考音到六语配音的完整路径

OpenVoice 语音克隆实战:从一段10秒参考音到六语配音的完整路径

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

想让自己的声音"替你朗读一整本小说",最大的障碍往往不是文本,而是怎么找到一个配得上你嗓音的音色。OpenVoice 是 MyShell(MIT)开源的语音克隆技术:给你一段 10 秒左右的参考音频,它就能提取出发声者的音色特征向量(SE 向量,可以理解为一张"声音指纹",用来唯一表征这个人是谁),再让任意 TTS 引擎用这个音色把新文本读出来。和需要几分钟录音、还要自己训练模型的端到端克隆方案相比,它的差异点在于即时克隆——不训练、不微调,参考音频甚至可以是任何语言。

一段声音的完整旅程:从文本到克隆语音

OpenVoice 把"生成声音"拆成两件职责不同的事:基础说话人 TTS(Base Speaker)负责"说什么、什么情绪、多快",音色转换器 ToneColorConverter 负责"用谁的声音说"。

文本进来之后,先经过基础说话人 TTS——V1 用内置的BaseSpeakerTTS,V2 则接入 MeloTTS 这个多语言引擎——产出一段"中间音频"。这句话的内容、节奏、情绪都对了,但说话人是模型自带的固定基础音色,不是你要克隆的那个人。与此同时,你的参考音频被 VAD(语音活动检测,用来自动切出有人说话的片段)切成分段,每段转成梅尔频谱(一种把声音画成"时间×频率"二维图的表示),送入 ref_enc 编码器,压缩出目标 SE 向量。

关键的戏法在下一步。中间音频同样走编码器—Flow—解码器结构,其中 Flow 部分使用 IPA 对齐的中间特征(国际音标对齐,保证跨语言时音素级别对得上)把"音色"从音频里剥离出去,同时保留情绪、节奏、语调;源 SE(基础说话人)和目标 SE(被克隆的人)被注入解码器,最终输出的音频就变成"用被克隆人的音色,说着基础说话人的内容"。所以同一个克隆音色,既能说英语也能说中文,还不串味。整条链路的核心代码都在 openvoice/api.py 里。

⚠️ 容易忽略的一点:OpenVoice 只克隆"音色",不克隆口音和情绪。口音和情绪由基础说话人 TTS 决定,克隆出来的声音带着基础音色口音是设计如此,不是 bug。

从零到第一句克隆音:装好就跑的清单

环境三行搞定:建 Python 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 .

然后按 docs/USAGE.md 里的说明下载对应的 checkpoint 压缩包,解压到checkpoints(V1)或checkpoints_v2(V2)文件夹。V2 还需要按文档里的命令额外安装 MeloTTS 多语言引擎。两个版本值得先花 10 秒区分一下:

V1V2
基础 TTS内置 BaseSpeakerTTSMeloTTS 多语言引擎
语言英语、中文英语(多口音)、西、法、中、日、韩
Checkpoint 目录checkpoints/checkpoints_v2/
定位快速体验风格控制音质更好,原生六语

最小可跑示例的核心其实就四件事:加载转换器、提取目标音色、生成基础音频、转换音色。

import torch from openvoice import se_extractor from openvoice.api import ToneColorConverter device = "cuda:0" if torch.cuda.is_available() else "cpu" tone_color_converter = ToneColorConverter('checkpoints_v2/converter/config.json', device=device) tone_color_converter.load_ckpt('checkpoints_v2/converter/checkpoint.pth') target_se, _ = se_extractor.get_se('reference.mp3', tone_color_converter, vad=True)

接着用任意 TTS(比如 MeloTTS 的tts_to_file)把目标文本读成tmp.wav,再调convert完成换音色:

tone_color_converter.convert( audio_src_path='tmp.wav', src_se=source_se, # 基础说话人的 SE 向量(checkpoints_v2/base_speakers/ses/ 下) tgt_se=target_se, # 参考说话人的 SE 向量 output_path='cloned.wav', message="@MyShell")

message参数会往音频里写入一个不可闻的水印,官方明确保留检测能力,公开发布内容时建议保留。完整可运行的版本直接看 demo_part3.ipynb。

三种玩法

跨语言播报:换语言不换声音

V2 的跨语言关键在于:目标 SE 向量跟语言无关,提取一次反复用。循环里只换 MeloTTS 的语言参数和对应的源 SE 文件,克隆音色保持不变。

from melo.api import TTS texts = { 'EN': "This voice was cloned by OpenVoice.", 'ZH': "你好,这是被克隆的声音。", 'JP': "こんにちは、これはクローンされた声です。", } for language, text in texts.items(): model = TTS(language=language, device=device) speaker_ids = model.hps.data.spk2id speaker_key = list(speaker_ids.keys())[0] model.tts_to_file(text, speaker_ids[speaker_key], 'tmp.wav') source_se = torch.load(f'checkpoints_v2/base_speakers/ses/{speaker_key.lower().replace("_", "-")}.pth', map_location=device) tone_color_converter.convert('tmp.wav', source_se, target_se, output_path=f'out_{language}.wav')

注意最后一行 SE 文件的命名规则与 demo_part3.ipynb 完全一致,以该文件为准。同一段参考音,可以让"同一个人"说出英语、中文、日语;参考音频本身也可以是任何语言,不必和输出语言一致。

情感化配音:同一声音也能耳语

V1 的基础说话人 TTS 内置了 9 个风格说话人:default、friendly、cheerful、excited、sad、angry、terrified、shouting、whispering。换情绪只需要改speaker参数,语速则由speed控制。

base_speaker_tts.tts(text, 'tmp.wav', speaker='whispering', language='English', speed=0.9)

💡 一个不显眼的坑:切换speaker后,src_se必须换成该风格对应的 SE(例如checkpoints/base_speakers/EN/下的en_style_se.pth),否则换色会不准。每个风格在 checkpoint 包里都有配套算好的 SE 文件,参考 demo_part1.ipynb 的用法。

批量合成:文本列表进,整套音频出

批量本质上就是循环:一条文本生成一次基础音频、转换、落盘。长文本交给 TTS 自行分句(V1 的tts内部会自动切句并加停顿拼接)。GPU 显存紧张时,把转换器切到device="cpu"即可,音质不变,只是慢一些。

踩坑速查:按现象对号入座

  • 报 "input audio is too short":VAD 切不出任何语音段。换成 3–10 秒的干净单人录音,去掉长静音段。
  • 口音/情绪不像参考人:设计如此,只克隆音色。想要不同口音,换对应口音的基础说话人,详见 docs/QA.md 第一部分。
  • 同名音频复用,结果像没变get_se会把 SE 按音频名缓存在processed文件夹。换个文件名,或给get_se传一个新的target_dir
  • Silero VAD 下载失败(机器访问不了 GitHub):按 docs/QA.md 的 Silero 一节,手动下载压缩包放到 torch 的 hub 缓存目录。
  • CUDA out of memorydevice="cpu"兜底,或缩短参考音频减少分段数量。

它不擅长的部分

OpenVoice 自己定位为"技术"而非"产品":它不保证对每副嗓子都出完美的音色,参考音频的挑选和预处理仍要你自己把关。风格词表也被基础模型自带的说话人数框住,口音和情绪则完全不在克隆范围内。值得持续关注的方向是 V2 的音质迭代与原生语言集扩展——而基础说话人本身是可插拔的,你换上哪个开源 TTS,语言覆盖的上限就是哪。

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

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

http://www.cnnetsun.cn/news/4350896.html

相关文章:

  • npm依赖安全:如何评估一个包的Blast Radius爆炸半径影响范围
  • 猫抓CatCatch浏览器插件:网页媒体嗅探与资源抓取完全指南
  • 打造高级交互作品集:从产品思维到技术实现的全流程指南
  • 清源AI开发实战:无尽冬日采集设置全流程解析
  • 基于SpringBoot的在线智慧社区服务平台系统(毕业设计项目源码+文档)
  • LangGraph实战:从零构建可控的Agent状态机编排
  • 智能车竞赛制胜关键:工程化开发流程与模块化架构实战
  • PDFMathTranslate 自由页码选择功能完整指南:大论文只翻需要的几页
  • JAX 还是 TensorFlow?一份让你 10 分钟拍板的完整选型指南
  • 大数据专业毕业设计选题
  • Kronos 使用指南:3 步跑通开源金融 K 线基础模型
  • 6GB显存单图生成3D模型:ComfyUI到UE5全流程实战
  • FCPX插件如何高效制作科技感SaaS产品演示动画
  • 语音控制Minecraft换地形:RCON实现与服务器崩溃排查
  • 用ED度量神经网络简单性:多项式表示与复杂度分析
  • 基于SpringBoot的知遇心理服务系统设计与实现毕业设计项目源码文档
  • AI应用开发学习路径:Agent、微调与私有化部署全攻略
  • Claude Code Router:多 Agent 多模型统一路由入口,三步接入指南
  • 如何训练奖励模型:train-llm-from-scratch的Bradley-Terry损失详解
  • 我的世界Overlay测试指南:拼好种与终末之诗通关验证
  • 暴跌行情下,用市场温度判断短线与长线交易逻辑
  • JobOps签证赞助商查询教程:一站式验证UK签证担保公司资质
  • 上运动神经元 vs 下运动神经元:从解剖到瘫痪定位诊断一次讲清
  • 从采集设置到可视化流程:用清源AI搭建游戏调度决策助手
  • 小智音箱蓝牙通信实战:ESP32+SPP透传与调试全攻略
  • 基于Django的智能图书管理系统:数据驱动、分析与推荐一体化实践
  • Loop Engineering深度解析:闭环原理、核心要素与工程落地
  • 交银金科后端岗笔试复盘:考点、编程题与避坑指南
  • PageIndex 自托管部署:三步在本地搭好无向量文档索引
  • SpringBoot+Vue人事管理系统:从源码拆解到实战部署