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
手里只有一段 10 分钟左右的录音——一首歌、一段直播片段——却想让 AI 语音转换实时把"你的声音"变成"那个人的声音"?传统做法要么录音量巨大,要么调参耗时。RVC(Retrieval-based-Voice-Conversion-WebUI)是一个基于 VITS 的变声框架,约 10 分钟低底噪语音数据就能训出一个可用的音色模型,实时变声端到端延迟约 170ms,用 ASIO 设备还能压到 90ms 左右。训练、推理、实时换声全部在一个网页界面里完成,新手友好。
它凭什么只要 10 分钟数据
RVC 不是让模型从零"学合成",流程拆开就三步:
- 先听懂:用 assets/hubert/ 里的预训练模型把音频抽成一串特征向量;
- 再换声:推理时去目标音色的特征库(index 文件)里做 top1 检索,直接把你声音的特征替换成目标音色的特征。仓库简介里写得很直白——用 top1 检索替换输入源特征为训练集特征来杜绝音色泄漏;
- 最后合成:VITS 模型把替换后的特征还原成能听的声音(infer/lib/infer_pack/models.py)。
| 步骤 | 干什么 | 在哪 |
|---|---|---|
| 先听懂 | 抽 HuBERT 特征 | infer/lib/jit/get_hubert.py |
| 再换声 | top1 检索替换特征 | faiss 索引 + infer/modules/vc/pipeline.py |
| 最后合成 | VITS 还原成波形 | infer/lib/infer_pack/models.py |
所以训练数据要干的事其实不多:填一个特征库,再微调一下底模。而底模本身是拿接近 50 小时的开源高质量 VCTK 数据预训练好的,起点高,少量数据自然够用——这也是"10 分钟数据训练语音模型"能成立的原因。
从零跑通:数据 → 训练 → 换声
装环境
按显卡选依赖文件,N 卡最常见:
pip install -r requirements.txt # NVIDIA pip install -r requirements-dml.txt # AMD/Intel(DirectML)另外需要装好 ffmpeg(Ubuntu 下sudo apt install ffmpeg),从 tools/ 目录的脚本下载 assets 预训练文件,再把 rmvpe 音高模型放到根目录。
准备约 10 分钟数据
- 选底噪低的干净音频:几首纯人声歌、一段播客就够;带伴奏的先用 UVR5 分离人声(RVC 界面里可以直接调用);
- 在界面"数据处理"里跑自动切片(逻辑在 infer/lib/slicer2.py)、音高提取(推荐 rmvpe,哑音问题最少)、特征提取;
- 官方 FAQ 的建议区间是 10–50 分钟(见 docs/cn/faq.md),10 分钟是能用的下限。
训练
python infer-web.py启动 WebUI 后在训练选项卡里点一键训练。两个要点:
- total_epoch:数据底噪大,20–30 轮就够;音质干净、时长足,可以放到 200;
- 训练完你会拿到两样东西:
weights/下 60MB+ 的模型文件(用来分享、推理的),和logs/下以added_开头的 index 文件(特征库)。别忘了 index,换声时的检索就靠它。
换声
推理选项卡加载模型、选上 index、调参,输入音频文件就能得到转换结果。想实时用就运行go-realtime-gui.bat,麦克风进、耳机出,延迟 170ms 左右。
效果不够好?先看这几个参数
关键参数都在 configs/config.json(默认值见 configs/config.py):
| 参数 | 管什么 | 建议 |
|---|---|---|
| index_rate | 检索强度:0 纯模型,1 完全靠检索替换 | 音色不够像,先试 0.6–0.8;音色发闷、机械感强就降到 0.3–0.5 |
| filter_radius | 频谱包络平滑 | 3–5,输出偏"硬"就调大 |
| rms_mix_rate | 音量归一化混合比例 | 0.5 附近,响度忽高忽低时再动它 |
| f0method | 音高提取算法 | rmvpe 最稳 |
| block_time | 实时模式分块时长 | 0.1–0.2,越小延迟越低 |
调参的优先级:先确认 index 选对了,再调 index_rate,最后才碰 filter_radius。
常见翻车现场与解法
- 一键训练结束却没有 index 文件:大概率是训练集太大把添加索引那步卡住了。点一下"训练索引"重新补建即可,FAQ 里说明已用批处理方式解决内存问题。
- 界面弹 Expecting value / Connection Error:十有八九是代理问题,关掉系统全局或局域网代理再试。
- Cuda out of memory:训练就缩小 batch size;推理就调小 configs/config.py 结尾的
x_pad、x_query等参数。4GB 显存是训练的下限,4GB 以下比较痛苦。 - 推理时看不到刚训的音色:先点"刷新音色";还没有就看
logs/实验名/下的训练日志确认是否报错。 - ffmpeg error / utf8 error:八成不是 ffmpeg 的锅,是音频路径问题——路径里带空格、括号等符号,或训练集目录是中文路径。
能用在哪些地方
- AI 翻唱:UVR5 分离人声后把整首歌换成另一个音色;
- 实时变声:直播、游戏、联机开会,端到端约 170ms(ASIO 约 90ms);
- 角色配音:给虚拟形象、短视频、有声内容训一个专属音色;
- 批量处理:tools/ 里有
infer_batch_rvc.py等命令行脚本; - 服务化:api_240604.py 提供 API 接口,仓库还带 Dockerfile 和 docker-compose.yml 容器化方案。
从哪开始
第一步很简单:备一段 10 分钟左右、底噪干净的录音,python infer-web.py把界面跑起来,按"数据处理 → 训练 → 推理"走完一遍,先出声音。别急着调参——等能稳定出声之后,再用 index_rate 和 filter_radius 去权衡"像不像"和"自不自然"。
【免费下载链接】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),仅供参考