3秒录音复刻一个人的声音,还能说6种语言:OpenVoice语音克隆实战
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
OpenVoice 是 MIT 与 MyShell 开源的语音克隆基础模型:给它一段 3 秒的干净参考音频,就能复刻出对方的音色,并且同一音色可以说英语、中文、日语等 6 种语言。读完这篇,你能在本地跑出第一条克隆音频,并掌握调整情绪、语速的方法。
它到底能干什么
最常见的三种玩法:
3 秒录音复刻声音。输入是一段干净单人短句(mp3/wav),3 秒就够;输出是用这个音色朗读的任意文本。仓库里自带一条示例录音resources/example_reference.mp3,可以直接拿来试。
跨语言:参考音频是什么语言都行。参考音频是中文说话人,输出可以是英文、日文、韩文;V2 原生支持英、中、西、法、日、韩 6 种语言,不需要重新训练。
风格迁移:同一音色,不同讲法。同一段文字可以输出耳语、喊叫、开心、悲伤等风格,而音色始终锁定参考人。
| 传统语音克隆 | OpenVoice | |
|---|---|---|
| 参考数据 | 需 10 分钟以上样本 | 3-5 秒即可 |
| 语言 | 多为单语言 | 6 种语言跨语言 |
| 风格 | 固定输出 | 情绪/语速可调 |
个人把玩用本地环境就够了;做演示时可以用 Gradio 一条命令起网页;上生产的话,docs/USAGE.md 里附了社区维护的 Docker 部署指南。
跑通第一次:从装环境到出第一条音频
OpenVoice 官方面向 Linux 环境,建议用 conda 隔离,避免依赖冲突(librosa、faster-whisper 等对版本有硬性要求):
conda create -n openvoice python=3.9 -y && conda activate openvoice git clone https://gitcode.com/GitHub_Trending/op/OpenVoice cd OpenVoice pip install -e .接着是模型文件:V1 和 V2 的 checkpoint 都要从官方源下载,地址在 docs/USAGE.md 的安装章节,V1 解压到checkpoints,V2 解压到checkpoints_v2;用 V2 的话还要顺带装 MeloTTS,USAGE 的 V2 小节里有命令。
环境就绪后,先看懂代码再跑,不然容易迷路。语音克隆的核心是一个两段式流程:先用基础 TTS合成一版"中性人"音频,再由音色转换器把这版的音色替换成参考音频的"指纹"——节奏、语调、风格保留,只有嗓音换了人。入口实现在openvoice/api.py里:
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') converter = ToneColorConverter('checkpoints/converter/config.json', device=device) converter.load_ckpt('checkpoints/converter/checkpoint.pth') target_se, _ = se_extractor.get_se('reference.mp3', converter, target_dir='processed', vad=True) source_se = torch.load('checkpoints/base_speakers/EN/en_default_se.pth').to(device) base_tts.tts('Hello, this is OpenVoice.', 'tmp.wav', speaker='default', language='English', speed=1.0) converter.convert('tmp.wav', source_se, target_se, output_path='cloned.wav', message='@MyShell')reference.mp3换成你的 3 秒参考录音。get_se内部先做 VAD 切段,再把各段嵌入取平均,得到的target_se就是音色指纹;convert里的message参数会给输出音频打一个不可听的水印。跑完听cloned.wav,音色像就说明通了。不想写代码的话,也可以直接起自带的 Gradio 界面:
python -m openvoice_app --share启动后打开本地地址,上传参考音频、输入文本就能预览生成效果。
核心能力拆解
音色复制:只留指纹,丢掉背景
音色复制的本质是从录音里只留"指纹",把内容和环境都扔掉:se_extractor先用 VAD 把参考音频切成有效语音段,再对每段提取嵌入并取平均,得到一个稳定指纹。所以参考音频要 3-5 秒、单人、无背景音;太长或太吵,平均进去的就是噪声。
💡 指纹会按文件名缓存在processed/目录里,拿旧文件名覆盖新音频会被命中旧缓存,每个人请用唯一文件名。
风格微调:情绪和语速其实归基础模型管
有个容易误判的点:OpenVoice 只克隆音色,不克隆情绪和口音。输出的情绪和节奏来自基础 speaker 模型,所以调风格要动base_tts.tts的参数:speaker内置 friendly、cheerful、excited、sad、angry、shouting、whispering 等选项,speed控制语速(1.0 正常,0.9 偏慢)。注意换了 speaker 就要同步换对应的source_se。这个机制的边界也要清楚:你想要"参考人的音色 + 参考人口音"做不到,只能是"参考人音色 + 基础 speaker 的风格"。
跨语言克隆:V2 原生支持 6 种语言
V2 里直接写目标语言文本,MeloTTS 负责该语言的合成,转换器再换音色。跨语言克隆不要求参考音频的语言出现在训练集里,这是这套架构在设计上的关键一环。中文文本里夹几句英文的混合写法也能跑。V1 的基础模型只有英文,想输出其他语言需要替换对应语言的 base speaker,做法在 docs/QA.md 里有说明。
你大概率会遇到的情况
生成的声音情绪和参考人差很多,"不太像"不是 bug。音色转换器只管音色,情绪和口音来自基础 speaker。解法是换一个更贴近目标风格的基础 speaker,或自己训练一个接进来。
音频爆音、杂音多、甚至听不清按顺序排查:参考音频有没有背景噪声;是不是混了两个人;有没有大段空白;时长是否过短。还有一个隐蔽坑:参考音频用了旧文件名,processed目录里是旧缓存——删掉该目录重跑即可。
首次运行在 get_vad_segments 处报下载失败这一步要拉取 Silero VAD 模型,网络不通就会挂。解法是手动下载 silero-vad 的 zip 包,解压到家目录的~/.cache/torch/hub/snakers4_silero-vad_master。
参考音频短一点就报 "input audio is too short"VAD 切段要求最低有效语音时长。解法很直接:用 3 秒以上、语音尽量连续的录音。
跑通之后可以往两个方向走:替换基础 speaker 接入自己的新语言;或者打开 demo_part2.ipynb 把跨语言组合玩一遍。
【免费下载链接】OpenVoiceInstant voice cloning by MIT and MyShell. Audio foundation model.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVoice
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考