RVC 变声框架完整指南:10 分钟人声样本,训练出可换声线的 AI 声音
【免费下载链接】Retrieval-based-Voice-Conversion-WebUIEasily train a good VC model with voice data <= 10 mins!项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI
Retrieval-based-Voice-Conversion-WebUI(社区通称 RVC)是一个基于 VITS 的变声(语音转换)框架:把一小段目标人物的声音喂给它训练,之后你唱的、说的任何一段音频都能被"换成"那个人的音色。它的核心卖点就一句话——10 分钟以内的干净人声数据,就能训出一个可用的变声模型,普通消费级显卡几分钟内就能训完。
一个下午的"声音分身":它替你解决什么
假设你有两个很具体的需求:给一首翻唱换一条别人听不出的 AI 声线,或者给一段口播、游戏直播做实时变声。传统音效软件只能整体升降音调,"音色"本身是换不掉的——音色是声带、口腔、发声习惯共同决定的,只能靠"模仿",而模仿最省事的方式就是让机器学。
RVC 接住的就是这个场景:它不生成文字,也不做翻译,只干一件事——把 A 段音频的"内容"(唱了什么字、什么旋律)保留下来,用 B 人的"音色"重新演绎一遍。数据门槛被压得很低:官方推荐 10 分钟起步,质量好的话 5 分钟也能见效,这在同类方案里属于很友好的水平。
先看链路:RVC 是怎么把声音"换"掉的
这一节不写代码,先给你建立预期,知道每一步在做什么,后面调参不慌。
整个系统分"训练"和"推理"两条链路,中间用模型文件衔接:
训练链路(一次性):样本 → 特征 → 模型 + 索引
- 你把目标人声的文件夹(10~50 分钟录音)指给训练页;
- 系统先把音频按静音切段、降噪、统一转成 16kHz 采样(采样率指每秒记录多少个音频点,16k 是语音识别与特征提取的通用规格);
- 用 HuBERT 模型把每段音频编码成 256 维的数字特征(HuBERT 是一个语音特征编码器,可以理解为"把声音翻译成机器能比较的坐标");
- VITS 主干(一种语音合成模型,负责"特征 + 音高 → 波形")从预训练底模出发微调,学到这个人的音色;
- 最后用 faiss(Facebook 出品的向量检索库)给训练集特征建索引,存成
.index文件。
推理链路(每次使用):输入音频 → 音高 + 特征 → 检索混合 → 输出
- 对你的输入音频提取音高曲线(f0,即每一帧的基频,决定旋律和声调走向),算法可选 RMVPE、harvest、pm、crepe 等;
- 同样用 HuBERT 提取特征,然后到刚才的索引里做 top1 检索——找到训练集中最接近的特征,替换掉输入里的部分源特征;
- 替换后的特征 + 音高一起送进 VITS 合成,输出目标音色的音频。
第 2 步的"检索替换"正是项目名字里 Retrieval-based 的含义,也是 RVC 的招牌设计:它从机制上掐断了"原说话人音色泄漏"的通道(所谓音色泄漏,就是输出听起来还是你原本的嗓门)。理解了这一点,后面所有参数你都会知道为什么存在。
最短路径:从克隆到打开 WebUI
这一节解决"最快怎么跑起来",只保留必要命令,其他平台差异见文末文档。
1️⃣ 拿到源码(需要 Python 3.8+ 环境):
git clone https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI cd Retrieval-based-Voice-Conversion-WebUI2️⃣ 装依赖。先装 PyTorch(若已有可跳过),再按显卡选清单:N 卡用requirements.txt,A 卡/I 卡用requirements-dml.txt:
pip install torch torchvision torchaudio pip install -r requirements.txt⚠️ 坑点:RTX 30 系(Ampere 架构)在 Windows 上装 PyTorch 时建议指定 CUDA 版本源(--index-url指向 cu117),否则容易出现装得上但跑不起来的依赖冲突。
3️⃣ 装 ffmpeg(RVC 内部用它读音频,缺了会报 ffmpeg error)。Linuxsudo apt install ffmpeg,macOSbrew install ffmpeg,Windows 把 ffmpeg.exe / ffprobe.exe 放到项目根目录。
4️⃣ 准备预训练模型:把assets/hubert/、assets/pretrained/、assets/uvr5_weights/等预模型下载到对应目录(tools/目录下有配套的下载脚本可参考)。想用 v2 底模则额外下载assets/pretrained_v2;想用效果最好的 RMVPE 音高算法,再把rmvpe.pt放到项目根目录。
5️⃣ 启动:
python infer-web.py浏览器自动打开 127.0.0.1:7865(端口可在启动参数--port中改)。看到页面上显卡信息栏正常显示、五个选项卡(模型推理 / 伴奏人声分离 / 训练 / ckpt处理 / Onnx导出)都在,就表示环境通了 ✅。
训练环节:把样本音频变成你的声线模型
这一节解决"我的声音怎么进来"。打开"训练"选项卡,流程只有三步,全部在网页里点:
- 填实验名:给这次训练起个名字(如
my-voice),所有中间产物会存在logs/my-voice/下。这里还要决定是否"考虑音高"——要唱就得开,纯说话的模型可以关,更轻更快。 - 填数据文件夹 → 一键训练:一键按钮会依次完成数据预处理(切段、降噪、提取音高和 HuBERT 特征)、模型训练、faiss 索引训练。看到 "Training is done" 即训练成功。
- 收模型:
assets/weights/下会多出一个 60MB+ 的.pth文件,logs/实验名/下有added_xxx.index。分享模型时打包这两样即可。
数据准备的三条经验(直接决定模型上限):
- 时长:10~50 分钟最稳;底噪小、音色有辨识度,5 分钟也能出活。
- 底噪:这是第一优先级,录音环境安静比多录一小时更重要。音质差的数据,训练轮数(total_epoch)拉到 200 也带不动底模,20~30 轮反而合适。
- 路径:音频直接放在文件夹根层(子文件夹里的文件不会读);路径里避免空格、括号和中文,后面单独说。
推理调优:决定"像不像"的三个核心参数
模型训好了,在"模型推理"选项卡选音色、传音频即可出结果。但同一模型,参数不同,观感差距很大。按影响从大到小讲三个:
① 索引率(index rate)——治"音色泄漏"的总开关。它是检索混合的强度:调到 1 时理论上完全用训练集特征替换源特征,音色最像目标人,但输出音质会被拉向训练集的音质水平;调到 0 则完全不检索,音质可能更好、但容易漏回你自己的嗓门。默认 0.6~0.75 是常见折中。如果你训练集本身质量高、时长长,模型自己就不太依赖检索,索引率怎么调差别不大。
② 音高提取算法(f0 method)。旋律、声调全靠它,选错会"哑音"或跑调。优先选 RMVPE(Interspeech 2023 的先进算法,效果和速度都是目前最好、资源占用最小);harvest 精度高但慢,适合离线精修;pm 和 crepe 可作为对照。男低音场景 RMVPE 优势尤其明显。
③ 音高移动(key)——变调旋钮。整数步长升降调,男声换女声或反之常用 ±4 左右。它和检索是两回事:检索管"音色",这个管"音域",互不替代。
批量处理时用"批量推理"子页,传一堆文件自动排队;想省事的用户也可以直接看 tools/infer/ 下的命令行版推理脚本。
进阶玩法:实时变声与 API 集成
这一节解决"离线转完还不够快,怎么办"。
实时变声:Windows 用户双击go-realtime-gui.bat(等价于运行 gui_v1.py),就能边说边变声,默认端到端延迟约 170ms,用 ASIO 音频设备可压到 90ms 左右。界面支持参数热更新(改了参数不用重启)、模型懒加载(切过一次的模型不再重复载入),还有个"响度因子"让输出响度贴近输入,避免忽大忽小。⚠️ 输入和输出设备要选同一类(比如都选 MME 或都选 WASAPI),跨类型容易无声。
API 集成:想把它接进自己的服务,仓库自带 api_231006.py 和更新版的 api_240604.py,暴露 HTTP 接口做推理与音色加载;rvc_for_realtime.py 则是给实时场景用的服务入口。写业务代码时参考这几个文件里的请求字段即可。
ONNX 导出:"Onnx导出"选项卡可以把模型转成 ONNX 格式(一种跨平台推理格式),配合 infer/lib/infer_pack/onnx_inference.py 可以在没有 PyTorch 环境的地方推理,适合部署到 A 卡/I 卡或嵌入式场景。
排障:最容易卡住的五个坑
这里把官方 FAQ 里高频问题收成"原因 → 做法",对照着处理:
- ffmpeg error / utf8 error:多半不是 ffmpeg 的锅,是路径问题——音频路径带空格、括号,或训练集目录是中文路径。把路径改干净重来,比升级 ffmpeg 有效。
- 训练完没有 index 文件:一键流程末尾加索引可能因数据集太大卡住。单独再点一次"训练索引"按钮即可。
- CUDA out of memory:训练时把 batch size 往小调(调到 1 还 OOM 只能换卡);推理时去 configs/config.py 尾部把
x_pad、x_query、x_center、x_max缩小。4G 以下显存(1060 3G、各 2G 卡)建议放弃训练,4G 显存还能救。 - Connection Error / 打不开页面:多半是启动 WebUI 的那个黑色控制台窗口被你关掉了,服务已随进程终止。
- tensor 尺寸不匹配(17280 vs 0 / 24 vs 16 之类):前者去
wavs16k文件夹删掉明显比别的文件小一截的异常音频再训;后者原因是在训练中途改了采样率,要么保持原采样率,要么换实验名从头训。 - Windows 报 llvmlite.dll 找不到:装一遍微软 VC++ 运行库再重启 WebUI 即可,不是代码问题。
下一步与资源
服务已经跑起来了,建议按这个顺序把能力摸熟:先训一个 10 分钟样本的小模型,用"单次推理"出一段结果试听;不满意时只动 index rate 和音高提取算法这两个参数,其他先不动,这样你能分清"是数据问题还是参数问题";效果满意后再上"批量推理"跑整首歌,最后尝试go-realtime-gui.bat体验实时链路。
想深入时,按这个索引走:
- 常见问题全集:docs/cn/faq.md
- 训练流程与参数详解:docs/en/training_tips_en.md
- faiss 索引原理与 IVF 参数:docs/en/faiss_tips_en.md
- 推理核心逻辑(检索混合、响度对齐都在这里):infer/modules/vc/pipeline.py
- 模型合并 / 提取 / 转 v2:infer/lib/train/process_ckpt.py
- 多语言更新日志:docs/cn/Changelog_CN.md
调优到瓶颈时,方向只有一个:换更好的训练集。参数是修车,数据才是换发动机。
【免费下载链接】Retrieval-based-Voice-Conversion-WebUIEasily train a good VC model with voice data <= 10 mins!项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考