获取音频
训练推荐使用真无损音频,也就是 pcm_f32le 格式的音频文件,推荐购买实体专辑后导出,可以参考
https://www.bilibili.com/opus/925630344961458181
但不要转换为 flac 格式,直接输出为 wav 格式
本文章使用 RVC 架构的 Applio,训练大概需要 10min-60min 的干声以获取较好的结果,不过最多不要超过 2h,另外质量大于数量,Garbage In, Garbage Out!
Youtube
关于从 Youtube 获取音频,可以使用 yt-dlp 下载,这里获取的也是从有损格式转换,并不是真无损音乐
Github: yt-dlp/yt-dlp
下载最高音质的 YouTube 视频的音频
| |
如果是较长的音频 (超过 10min),可通过 ffmpeg 进行分割
| |
这里将按 10min 一次分割,按其他分钟可更改
-segment_time 600为其他数字
合并为同一文件可以先创建一个 filelist.txt 文件列出所有片段
| |
然后使用命令合并
| |
关于精准截取一个片段,比如从 10min 开始截取 15min 的话
| |
其他来源
对于其他来源的 flac, mp3 等格式的音乐,可以使用 ffmpeg 转换格式以进行推理
| |
但就算是从有损格式转换为无损格式,也并不是说歌曲变成无损的了,建议使用直接从实体专辑提取出的 wav 音频
提取干声
搭建环境
首先安装 MiniConda。创建环境并激活
| |
安装 PyTorch
| |
安装 openmirlab/bs-roformer-infer
| |
安装 nomadkaraoke/python-audio-separator
| |
下载模型
使用命令查看当前可用模型
| |
2026-05-21 时 bs-roformer-download 运行输出为
| |
这里的模型大概用途如下:
- BS Roformer SW by jarredou: 可以分离出 bass, drums, guitar, instrumental, other, piano, vocals 七种音轨
- BS Roformer | Chorus Male-Female by Sucial: 分离出男声、女声和混响
- BS Roformer | Instrumental Resurrection by unwa: 伴奏超清重构模型,修复老歌的伴奏
- BS Roformer | Male-Female by aufr33: 分离出男声和女声
- BS Roformer | Vocals Resurrection by unwa: 人声超清重构模型,Revive 的激进版本,修复老歌的人声
- BS Roformer | Vocals Revive Series: 人声修复模型,类似画质超分的感觉
- BS Roformer | Vocals by Gabox: 标准人声剥离,对比第一个 SW 的七种轨道,这个是只能分离出伴奏和人声
- BS-Roformer-De-Reverb: 去混响
下载需要的模型,这里下载两个模型,不过因为下载链接失效,其中一个需要另外下载
| |
关于去混响模型可以在 <huggingface.co> 找到下载,链接为: anvuew/dereverb_bs_roformer
下载模型文件和配置文件 yaml 并放在对应文件夹下,建议将配置文件 yaml 重命名为和模型相同文件名
音频处理
这里进行三步处理,首先使用 BS Roformer SW by jarredou 进行分离出人声,然后使用 Roformer Model: MelBand Roformer | Karaoke V2 by Gabox 分离出和声,最后使用 Roformer Model: BS-Roformer-De-Reverb 去混响,从而得到最终的干声
当然第二步和第三步可以调换试一下,说不定效果也会变更好,具体根据音乐不同,最优解不同
首先创建输入输出文件夹,这里有三步,所以创建每一步的输入输出
| |
在 step1_input 放入音乐 (推荐使用英文命名),注意使用无损 wav 格式
<1> 多轨拆分
使用 BS Roformer SW by jarredou 进行多轨拆分。修改模型 yaml 文件,添加相关配置项 (路径在 models/roformer-model-bs-roformer-sw-by-jarredou)
| |
这些配置项根据设备性能进行调整
- batch_size: 按显存选择,显存越大填越大,比如 16G 显存填写 16
- dim_t: 请勿修改,这是模型训练的时域维度
- chunk_size: 下载的配置缺失该项,按照上例添加并填入
352768 - num_overlap: 按显存选择 2-10
- normalize: 保持 false
开始推理
| |
推理完成后将后缀为 _vocals.wav 的文件放入第二步输入文件夹 step2_input
(optional) 与 MSST 混合获取更好的效果
一般情况下单独使用任何一种的效果已经够用,不 过如果追求极致的话,可以使用 MSST-BSRNN 跑一遍得到人声 vocals_msst.wav,然后将其和 Roformer 跑出的人声 vocals_roformer.wav 进行双轨融合,然后使用该文件进行接下来的步骤,可以直接使用 ffmpeg 进行融合
| |
其中部分参数解释
normalize=0: 关闭动态自适应包络,防止声音细节和音量产生突变-c:a pcm_s16le: 无损输出
<2> 人声提纯
提取和声使用的模型因为架构不同需要 audio-separator,该工具运行时下载
| |
推理完成后 Vocals 是主唱,Instrumental 为和声,将 Vocals 文件放入第三步的输入文件夹 step3_input
<3> 空间净化
使用 BS-Roformer-De-Reverb 去除人声里的混响,可以调整 yaml 配置
| |
其中 dim_t 不要修改,另外俩项根据显存修改
开始推理
| |
推理完成后获得后缀为 _noreverb.wav 的文件即为干声
(optional) 分离男女声
如果有男女合唱的话,可以先使用 BS Roformer | Chorus Male-Female by Sucial 将声音分离后提取 (该模型可以去
Sucial/Chorus_Male_Female_BS_Roformer
下载)
| |
变声
使用 Applio 进行变声处理 (RVC 架构)
项目地址: IAHispano/Applio
安装
安装非常方便,克隆源代码
| |
进入根目录运行 run-install.bat 即可开始安装
安装完成后运行 run-applio.bat 即可启动
训练模型
选择 Training 标签栏,在 Model Settings 新建一个 Model Name
然后在 Preprocess(预处理) 模块新建一个数据集并上传一些干声,上传完成后点击 Preprocess Dataset
Extract 模块保持默认即可,点击 Extract Features
Training 模块根据显存调整 Batch Size
- 8G: 4 or 8
- 12-16G: 12-16
- 24G-: 24-32
Save Every Epoch 保持默认 10 即可
Total Epoch 推荐 200-300,一般数据集在这个轮数下会比较好 (大概 220-250 是最优模型,具体可从这个地方向上或向下尝试)
调整完成后同意条款,开始训练 (Start Training) 完成后创建索引 (Generate Index)
推理
训练完成模型后变声在 Inference(推理) 标签栏,选择模型,可以先从 200-250 轮的模型测试,然后调高或降低轮数
关于高级选项 (Advanced Settings) 的选项
- Split Audio: 长音频勾选防止现存溢出,歌曲 (3min) 可能不勾选效果更好
- Autotune(自动电音/修音): 唱歌可勾选,独白不勾选
- Clean Audio(音频降噪): 视情况勾选
下方调整栏
- Pitch(音高): 男变女增加 12,女变男减少 12,相同为 0
- Search Feature Ratio(检索特征占比/索引率): 唱歌推荐 0.7-0.8,而播客、长独白等推荐 0.6-0.7
- Protect Voiceless Consonants(保护清辅音和呼吸声): 唱歌可调到 0.33 左右,也可 0.5,其他 0.5
调整完成后同意条款,开始转换 (Convert)
(optional) 双声道音频推理
Applio 只能输出单声道,所以输入立体声音频的处理效果超级奇怪,这里使用先分离声道,推理,然后再合并
使用 ffmpeg 分离声道
| |
分别进行推理后,合并为立体声
| |
(question) 端口占用问题
如果显示端口被占用的话,打开程序根目录的 app.py,修改 DEFAULT_PORT = 6969 为其他数值
尽量避开 Windows 预留端口,这些端口通过以下命令在 PowerShell 中查看
| |
混音
变声后的干声再和之前 多轨拆分 步骤分离的伴奏合并即可
因为将和声分离出来了,可以先试着将第二步的和声与第一步的伴奏混合成为新伴奏,然后使用 ffmpeg 将干声和新伴奏混合,命令都是一样的,如下
| |
当然纯干声并不是很好听,加点混响效果可能更好
| |
其中对于 aecho=0.8:0.88:40:0.4 参数解释如下
0.8: In Gain 也就是输入音量,干声进效果器的音量0.88: Out Gain 也就是输出音量,混响完出来的总音量40: Delays 延迟时间,声音碰到墙壁回弹0.4: Decays 衰减系数,让声音有淡淡的尾音延申
这个参数是简易录音室的效果感觉,舞台感使用 aecho=0.8:0.88:80:0.5,只是微调可以使用 aecho=0.8:0.88:35:0.25
上面是均衡混合,可以设置混合为不同的音量
| |
这里先输入的第一个音频 (干声) 为 100% 音量 [0:a]volume=1.0[v] 而第二个音频 (伴奏) 为 40% 音量 [1:a]volume=0.4[b]
而混响加调整伴奏的音量的话
| |
结语
这样无人工干预的效果我尝试了大概三个模型,效果并不是特别理想,对于部分音频还是人工干预进行处理效果会更好
另外这里使用的 bs-roformer-infer 稍微有点过时,不仅模型少还多数下载失效。如果允许的话,之后我会尝试使用更新的工具,届时继续发布文章
这篇文章并不完美,但这也算是我学习的记录,博客不就是用来记录这些的嘛