RVC 一键翻唱教程
基于 RVC (Retrieval-based Voice Conversion) 的自动化翻唱流程:输入原曲 → 人声分离 → 音色转换 → 混音输出
一、项目结构
e:\audio\
├── input/ # 输入:待翻唱的原歌曲 (.mp3/.wav/.flac)
├── out/ # 输出:翻唱完成的歌曲 (.wav)
├── yinyuan/ # 训练数据:151 首目标音色干声音频 (.mp3)
├── RVC/ # RVC 引擎
│ ├── auto_cover.py # ★ 一键翻唱脚本
│ ├── assets/weights/ # 模型权重 (e10 ~ e600,共 61 个检查点)
│ ├── assets/uvr5_weights/ # UVR5 人声分离模型权重
│ ├── assets/rmvpe/ # RMVPE 音高提取模型
└───└── logs/ # FAISS 索引文件 (.index)
二、环境要求
| 组件 | 版本/要求 |
|---|---|
| Python | 3.10 |
| PyTorch | 2.5.1+cu124 |
| CUDA | 12.4 |
| GPU | NVIDIA RTX 4060 Ti (≥8GB VRAM) |
核心依赖安装:
pip install torch-2.5.1+cu124-cp310-cp310-win_amd64.whl
pip install torchaudio-2.5.1+cu124-cp310-cp310-win_amd64.whl
pip install torchvision-0.20.1+cu124-cp310-cp310-win_amd64.whl
pip install librosa soundfile numpy scipy
三、使用方法
基本命令
# 单首翻唱
cd e:\audio\RVC
python auto_cover.py -i "../input/知我.mp3" -o "../out/知我.wav"
# 批量翻唱(整个目录)
cd e:\audio\RVC
python auto_cover.py -i "../input" -o "../out"
完整参数说明
参数 默认值 说明
──────────────────────────────────────────────────────────
-i, --input (必填) 输入歌曲路径 或 目录(批量模式)
-o, --output (自动) 输出路径 / 目录
-m, --model yin_yuan.pth RVC 模型文件
--uvr_model HP2_all_vocals UVR 分离模型
--agg 10 UVR 分离强度 (0-20)
-k, --key 0 变调(半音,+12 升八度)
--index_rate 0.30 索引混合率 (0-1)
--protect 0.50 清辅音保护率 (0-1)
--filter_radius 3 F0 中值滤波半径 (0-7)
--rms_mix_rate 0.90 音量包络混合率 (0-1)
--f0 rmvpe F0 提取方法 (rmvpe/crepe/harvest/pm)
--vocal_vol 1.05 人声音量倍率
--ins_vol 0.8 伴奏音量倍率
--keep_temp (保留中间文件) 调试用
四、处理流程
脚本内部自动执行三个步骤:
Step 1: UVR5 人声/伴奏分离
┌──────────┐ HP5_only_main_vocal ┌──────────┐ ┌──────────┐
│ 原歌曲 │ ─────────────────────────→│ 人声.wav │ │ 伴奏.wav │
└──────────┘ └──────────┘ └──────────┘
Step 2: RVC 音色转换
┌──────────┐ 模型 + protect + index_rate ┌──────────────┐
│ 人声.wav │ ─────────────────────────────────→ │ 翻唱人声.wav │
└──────────┘ └──────────────┘
Step 3: 混音合并
┌──────────────┐ ┌──────────┐ vocal_vol ×1.15 ┌──────────┐
│ 翻唱人声.wav │ + │ 伴奏.wav │ ──────────────────→ │ 最终.wav │
└──────────────┘ └──────────┘ ins_vol ×0.8 └──────────┘
五、咬字清晰度优化(核心)
5.1 推荐参数配置(v2 优化版)
经过多轮对比测试,以下参数在音色相似度和咬字清晰度之间取得最佳平衡:
| 参数 | 旧值 | ★ 推荐值 | 原理 |
|---|---|---|---|
protect | 0.05 | 0.50 | 保留原唱清辅音(s/sh/f/t/k),防止"四→是"糊音 |
index_rate | 0.95 | 0.30 | 降低 FAISS 音色匹配强度,减少吞字吞音 |
rms_mix_rate | 0.25 | 0.90 | 保留原唱音量起伏动态,咬字更自然 |
--uvr_model | HP2_all_vocals | HP5_only_main_vocal | 只抽主唱干声,不含和声干扰 |
--vocal_vol | 1.05 | 1.15 | 人声略突出于伴奏,听感更清晰 |
--ins_vol | 0.8 | 0.80 | 控制伴奏不过大,避免盖住人声 |
推荐命令行:
cd e:\audio\RVC
python auto_cover.py -i "../input" -o "../out" \
-m "yin_yuan_e450_s15300.pth" \
--uvr_model HP5_only_main_vocal \
--vocal_vol 1.15 --ins_vol 0.8
5.2 参数调优指南
🔑 protect(清辅音保护)— 最见效
| 场景 | 推荐值 | 效果 |
|---|---|---|
| 慢歌/抒情 | 0.4 - 0.5 | 保留气声、齿音细节 |
| 快歌/说唱 | 0.5 - 0.7 | 防止吞字 |
| 追求极致音色相似 | 0.2 - 0.3 | 像目标,但可能糊字 |
原理:protect 控制 hubert 特征中保留原唱信息的比例。过低(0.05)会导致清辅音被模型过度平滑抹掉;过高(>0.7)会导致音色转换效果减弱。
🎯 index_rate(索引混合率)
| 场景 | 推荐值 | 效果 |
|---|---|---|
| 咬字优先 | 0.2 - 0.3 | 清晰,可能音色稍淡 |
| 平衡 | 0.3 - 0.5 | 兼顾咬字和音色 |
| 音色优先 | 0.5 - 0.7 | 更像目标,但可能吞字 |
原理:index_rate 控制 FAISS 检索结果与模型输出的混合比例。过高(0.95)会强制匹配训练数据中的音色,导致吞字;过低(0)则只靠模型泛化,音色可能不稳定。
🎵 rms_mix_rate(音量包络)
| 场景 | 推荐值 | 效果 |
|---|---|---|
| 自然咬字 | 0.8 - 1.0 | 保留原唱抑扬顿挫 |
| 更平稳 | 0.2 - 0.5 | 音量均匀,但可能呆板 |
原理:控制翻唱人声使用原唱音量包络的比例。高值保留原唱的轻重缓急,让咬字更自然;低值使用生成器自带的音量,可能缺乏动态。
🎼 filter_radius(F0 中值滤波)
| 场景 | 推荐值 | 效果 |
|---|---|---|
| 保留细节 | 1 - 2 | 更细粒度的音高跟踪 |
| 平滑 | 3 - 5 | 减少音高抖动 |
| 极端平滑 | 6 - 7 | 适合音高极不稳定的输入 |
原理:对音高曲线做中值滤波的窗口半径。越小保留越多微妙的音高变化,越大越平滑但可能丢失细节。
六、模型选择
可用模型列表
训练了 61 个检查点(每 10 epoch 保存一次),位于 RVC/assets/weights/:
yin_yuan_e10_s340.pth ~ yin_yuan_e600_s20400.pth
如何选择最佳 epoch
| epoch 范围 | 特点 | 适用场景 |
|---|---|---|
| 100 - 200 | 泛化好,不过拟合 | 一般推荐 |
| 200 - 350 | 特征更丰富 | 新歌曲适应性强 |
| 450 ★ | 当前最佳 | 音色相似 + 咬字清晰 |
| 500+ | 可能过拟合 | 训练集内的歌效果好 |
当前最佳结果:yin_yuan_e450_s15300.pth(第 450 轮),经 9 首不同风格歌曲测试,咬字清晰度和音色还原度综合最佳。
七、训练数据
数据概况
- 来源:银元原声唱歌/说话片段
- 数量:151 个 .mp3 文件
- 时长:每段约 25 秒
- 格式:MP3,128kbps
- 总时长:约 63 分钟
数据优化建议
如果咬字仍有问题,可考虑扩充训练数据:
| 方向 | 说明 |
|---|---|
| 增加清辅音样本 | 添加含 s/sh/f/t/k/ch 丰富的录音片段 |
| 提高数据质量 | 使用 320kbps MP3 或无压缩 WAV/FLAC |
| 添加语速变化 | 慢速、快速、正常语速搭配 |
| 录制说话片段 | 15 秒清晰朗读,辅助咬字算法 |
八、常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 咬字模糊、吞字 | protect 太低 + index_rate 太高 | 设 protect=0.5, index_rate=0.3 |
| 音色不像目标 | protect 太高 | 降低 protect 到 0.3-0.4 |
| 人声被伴奏盖住 | vocal_vol 太小 | 增大到 1.15-1.3 |
| 整体音量过大破音 | 混音峰值 > 1.0 | 脚本自动防削波,无需手动处理 |
| 音准不稳 | F0 检测不准 | 换 --f0 crepe(更准但更慢) |
| 背景有残留噪音 | UVR 分离不干净 | 加大 --agg 15,或换其他 UVR 模型 |
九、技术架构
┌─────────────────────────────────────────────────────────┐
│ auto_cover.py │
├─────────────────────────────────────────────────────────┤
│ Step 1: UVR5 (Ultimate Vocal Remover 5) │
│ - 模型: HP5_only_main_vocal (MDX-Net 架构) │
│ - 输入: 任意格式音频 │
│ - 输出: 主唱人声 + 伴奏分离 │
├─────────────────────────────────────────────────────────┤
│ Step 2: RVC (Retrieval-based Voice Conversion) │
│ - HuBERT: 提取发音特征 (contentvec-500) │
│ - FAISS: 检索最匹配音色特征 │
│ - RMVPE: 提取音高 (F0) │
│ - Generator: HiFi-GAN 声码器合成音频 │
│ - protect: 保留原唱 hubert 特征比例 │
│ - index_rate: FAISS 索引混合比例 │
│ - rms_mix_rate: 音量包络保留比例 │
│ - filter_radius: F0 中值滤波半径 │
├─────────────────────────────────────────────────────────┤
│ Step 3: Mixdown │
│ - 人声归一化到 -1dB │
│ - 统一采样率到 44100Hz │
│ - 人声 × vocal_vol + 伴奏 × ins_vol │
│ - 自动防削波 │
└─────────────────────────────────────────────────────────┘
十、版本记录
| 版本 | 日期 | 参数调整 | 效果 |
|---|---|---|---|
| v1 | 初始 | protect=0.05, index_rate=0.95, rms_mix_rate=0.25, HP2 | 咬字模糊 |
| v2 | 优化 | protect=0.50, index_rate=0.30, rms_mix_rate=0.90, HP5 | 咬字清晰 ✓ |
最后更新:2026-06-08
目标音色:银元 (yin_yuan)
当前最佳模型:e450_s15300
当前参数:protect=0.50 / index_rate=0.30 / rms_mix_rate=0.90 / HP5 / rmvpe