10分钟音频训练专属AI音色:RVC变声器完整实操指南
【免费下载链接】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
你手里有 20 分钟自己的朗诵音频,想让 AI 用你的音色唱一首歌。开源项目 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)就是为这件事设计的:用不少于 10 分钟的语音训练一个音色转换模型,再在网页界面里完成批量与实时变声。
🔊 项目定位:RVC 变声器是什么
RVC 是一个基于 VITS 架构的开源语音转换(变声)框架,MIT 协议。它的特点不是单纯复现 VITS,而是在推理端用 top1 特征检索替换输入源特征,从机制上杜绝"音色泄漏"(即输出音色向底模或推理源漂移);同时集成了 UVR5 人声伴奏分离和 InterSpeech 2023 的 RMVPE 音高提取算法,并在 N 卡、A 卡、I 卡(CUDA、ROCm、DirectML、IPEX、macOS MPS)上都给了对应的运行方案。
| 对比维度 | RVC | 原版 VITS 训练流程 | 商业语音合成 API |
|---|---|---|---|
| 最少训练数据 | 10 分钟低底噪语音 | 数十分钟至小时级 | 无需训练,预设音色库 |
| 音色泄漏防护 | top1 检索替换源特征(内置) | 无内置机制 | 不适用 |
| 硬件支持 | CUDA / ROCm / DirectML / IPEX / MPS | 以 CUDA 为主 | 云端服务器 |
| 使用形态 | WebUI + 批量脚本 + API | 训练脚本为主 | HTTP 接口 |
| 成本 | 本地免费 | 本地免费 | 按调用量收费 |
📦 最短路径安装:从克隆到启动 WebUI
环境要求:Python 大于 3.8,建议 4GB 以上显存(官方 FAQ 明确 4GB 显存可用,4GB 以下不建议),系统需安装 ffmpeg。
第一步,克隆代码:
git clone https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI cd Retrieval-based-Voice-Conversion-WebUI第二步,按显卡安装依赖。N 卡执行pip install -r requirements.txt;A 卡 / I 卡执行pip install -r requirements-dml.txt;Linux 上 A 卡 ROCm 用requirements-amd.txt,I 卡 IPEX 用requirements-ipex.txt:
pip install torch torchvision torchaudio pip install -r requirements.txt第三步,补齐预训练模型。仓库assets/目录需要放入assets/hubert/hubert_base.pt、assets/pretrained/、assets/uvr5_weights/,训练 v2 版本模型还需assets/pretrained_v2/;使用 RMVPE 音高算法需下载rmvpe.pt放到根目录。tools/download_models.py和tools/dlmodels.sh就是用来批量下载这些文件的。
第四步,启动:
python infer-web.py浏览器打开http://localhost:7865(端口默认值定义在 configs/config.py 的--port参数里)。界面共 6 个选项卡:模型推理、伴奏人声分离、训练、ckpt 处理、Onnx 导出,按下面的流程走即可。
🎤 第一次变声:端到端产出一条转换音频
以"用我自己的声音转换一段测试音频"为目标,按顺序操作:
- 准备数据:把 10 分钟左右的清晰语音放进训练目录,在"训练"选项卡填实验名、选 v2/48000Hz 配置,点一键训练。它会依次完成切分、提取音高、提取 HuBERT 特征、训练模型、建立索引五步。
- 预期结果:控制台出现 "Training is done" 后,
weights/下生成 60MB+ 的.pth模型,logs/实验名/下生成added_*.index索引文件。 - 转换音频:切到"模型推理"选项卡,点"刷新音色列表和索引路径",在"单次推理"里输入待处理 wav 的路径,音高提取算法选默认的 rmvpe,点转换。
- 预期结果:页面返回输出音频,人声音色变成训练集中的目标音色,音高按你填的半音数偏移(0 表示不变调)。
注意点:
- 音色下拉列表里找不到刚训的模型,先点"刷新音色列表";仍没有就去
logs/实验名/下看训练日志(docs/cn/faq.md Q3)。 - 要分享或换机器部署的模型是
weights/下 60+MB 的.pth;logs/下的大文件是实验状态,含完整 checkpoint,不能直接用于推理(FAQ Q4)。 - 显示训练结束后的紧邻报错是假的,可以忽略(FAQ Q2)。
⚙️ 推荐训练与推理参数配置
真正影响出片质量的是下面这几个变量,其余保持默认即可:
| 参数 | 推荐值 | 原因 |
|---|---|---|
| 训练数据时长 | 10–50 分钟低底噪语音 | FAQ Q10:高音质且音色有特色时 5–10 分钟也可,1–2 分钟仅极端情况,不具备可复现性 |
| total_epoch | 底噪大:20–30;音质好时长多:可到 200 | FAQ Q9:低音质数据加高轮次,底模音质也带不动它 |
| 音高提取算法 | rmvpe(界面默认值) | InterSpeech 2023 算法,效果最好且比 crepe_full 快;输入是歌声时可换 pm 提速 |
| index_rate | 0–1 之间微调,批量脚本默认 0.66 | FAQ Q11:调高削减音色泄漏但音质向训练集靠拢,调 0 则不做检索保护 |
| protect | 0.33(默认,范围 0–0.5) | 保护清辅音和呼吸声、抑制电音撕裂;拉满 0.5 等于关闭 |
| 采样率配置 | v2/48k(48000Hz,128 mel,hop 480) | configs/v2/48k.json,v2 模型质量上限更高 |
| batch_size | 4(v2/48k.json 默认),显存不足降到 1–2 | 4GB 显存时 configs/config.py 会自动缩小 x_pad 等推理参数 |
数据侧的要求比参数更关键:录音环境底噪要低、用外置麦克风、覆盖多种语调语速的片段。模型融合("ckpt 处理"选项卡里的 ckpt-merge)可以在两个已训模型之间按权重混出新音色,用来微调"像又不完全像"的效果。
🎧 按你的角色组合 RVC 的三种用法
个人创作者(翻唱 / 虚拟角色):训练一个 v2/48k 模型,日常用批量脚本处理整目录音频,比 WebUI 里一首首点更快:
python tools/infer_batch_rvc.py \ --f0up_key 0 \ --input_path todo-songs/ \ --index_path logs/实验名/added_IVFxxx_Flat_nprobe_7.index \ --model_name 实验名 \ --opt_path output/ \ --f0method rmvpe \ --index_rate 0.66实时演奏 / 直播用户:运行 go-realtime-gui.bat(Windows)启动实时变声界面。README 给出的指标是端到端 170ms,配 ASIO 输入输出设备可降到 90ms,但非常依赖声卡驱动。相关运行时参数(阈值、block_time、crossfade)保存在configs/config.json。
工程集成用户:不用浏览器直接走代码。api_240604.py 把 WebUI 的能力暴露成 HTTP 接口,tools/infer_cli.py 和 tools/infer_batch_rvc.py 提供命令行推理,便于接进 CI 或自动化流水线。
🛠️ 常见报错与排查方法
以下五个问题来自 docs/cn/faq.md,按"现象→原因→解法"整理:
- 现象:ffmpeg error / utf8 error。原因:不是 ffmpeg 的问题,是音频路径带空格、括号或中文目录名。解法:把训练集移到纯英文、无空格的路径。
- 现象:CUDA out of memory。原因:显存不足。解法:训练时把 batch_size 降到 1;推理时缩小
configs/config.py结尾的 x_pad、x_query、x_center、x_max;4GB 以下显存直接放弃。 - 现象:训练成功但没有生成索引文件。原因:训练集太大,卡在"添加索引"步骤(一次性 add 对内存要求过高)。解法:再点一次"训练索引"按钮,走批处理 add。
- 现象:推理时看不到刚训好的音色。原因:音色列表是启动时加载的。解法:点"刷新音色列表和索引路径";仍看不到则查
logs/实验名/下的日志确认训练是否真的完成。 - 现象:把 logs 下的大 pth 拷到 weights 强行推理,报 f0、tgt_sr 等 key 不存在。原因:实验状态文件和推理模型不是同一种文件。解法:在"ckpt 处理"选项卡做"小模型提取",生成 60+MB 的推理模型后再刷新音色。
🔍 工作原理与核心模块路径
RVC 的推理链路是:输入音频 → 音高提取(F0)→ 内容特征提取(HuBERT)→ 检索替换 → 声学模型 + 声码器合成。
- 音高提取:infer/lib/infer_pack/modules/F0Predictor/ 下并列实现了 rmvpe、crepe、pm(pmf)、harvest 四种算法,训练和推理都从这里取。
- 内容特征与合成模型:infer/lib/infer_pack/modules/models.py 是 VITS 主模型(含 HiFi-GAN 声码器);infer/lib/jit/ 提供 HuBERT、RMVPE、合成器的 TorchScript 加速版本。
- 检索防泄漏:核心机制。推理时先对源音频特征在 faiss 索引中做 top1 检索,用训练集特征替换输入源特征。索引由 tools/infer/train-index-v2.py 训练,格式为
IVF{n},Flat。 - 训练流程:infer/modules/train/ 负责数据预处理(preprocess.py)、音高/特征提取(extract/ 子目录)、训练循环(train.py);infer/lib/train/process_ckpt.py 处理 checkpoint 的合并、拆分与小模型提取。
- 人声分离:infer/modules/uvr5/ 封装了 UVR5,WebUI 的"伴奏人声分离"选项卡直接调它,常用于先拆人声再清洗训练集。
🚀 扩展方向:模型融合与 ONNX 导出
两个值得优先尝试的方向:
- ONNX 导出:WebUI 的"Onnx 导出"选项卡或 tools/export_onnx.py 可以把训练好的模型导出为 ONNX,推理端参考 tools/onnx_inference_demo.py 和 infer/lib/infer_pack/onnx_inference.py,脱离 PyTorch 运行时部署。
- 模型融合:"ckpt 处理"选项卡的 ckpt-merge 按权重混合两个 pth,适合做"主音色 + 目标音色"的渐进微调,比重新训练快得多。
延伸阅读:中文 FAQ 见 docs/cn/faq.md,训练技巧英文版见 docs/en/training_tips_en.md,更新记录见 docs/cn/Changelog_CN.md。
下一步
准备 10 分钟低底噪人声,装好依赖跑通python infer-web.py,用一键训练加单次推理先产出一条可听的结果。
【免费下载链接】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),仅供参考