原文链接:https://zhuanlan.zhihu.com/p/635429751

So-vits-svc(SoftVC VITS Singing Voice Conversion)是一款开源免费AI语音转换软件,最近大火的AI孙燕姿利用的也是这一技术:

github.com/svc-develop-team/so-vits-svc

so-vits-svc可以通过学习一个人的声音,对另一首歌做音色替换。所需的样本量较少,且少量的训练时间就可以得到不错的效果。

但如果要真的跑so-vits-svc,步骤非常多,目前的门槛还是很高的。B站上有大神做了整合包,这个门槛会稍微低一点:

但目前网络上关于so-vits-svc的教程,大多没有把从下载、数据准备、模型训练到最终歌曲生成的整个流程讲清楚。

这篇文章会讲述在Windows系统中,利用so-vits-svc进行声音克隆的完整过程。

在进入教程之前你需要满足几个条件:

  • 有N卡,且内存在6G以上,并安装了对应的CUDA环境
  • 可以登录外网

一、下载so-vits-svc

1. 创建新的conda环境

首先你需要在电脑上安装Anaconda,生成一个新的环境,方便不同Python包的版本管理:

conda create --name so-vits-svc

激活该环境:

conda activate so-vits-svc

2. Git clone项目

首先把该项目下载到本地

git clone https://github.com/svc-develop-team/so-vits-svc.git

进入项目文件夹

cd .\so-vits-svc\

3. 安装所需的Python环境

pip install -r requirements_win.txt

注意:安装过程中,可能会有个别包安装失败。安装失败后,可以手动安装,例如我遇到了faiss, edge-tts, fairseq这三个包安装识别,然后自己手动通过pip安装:

pip install faiss-cpu
pip install edge-tts
pip install fairseq

4. 下载预训练模型文件

下载地址:checkpoint_best_legacy_500.pt | Powered by Box

下载得到checkpoint_best_legacy_500.pt文件,放到.\so-vits-svc\pretrain文件夹中。

二、准备训练集

so-vits-svc需要唱歌或者说话的音频文件作为训练集,这里以唱歌的音频为例。

准备训练集时,需要把人声提取出来,去掉和声和伴奏。然后把人声切成30秒以内的片段。

1. 歌曲下载

首先你需要下载一个人唱歌的音频,尽量下载无损音质(flac., wav.),音频的数量建议在20首以上。

2. 提取人声

人声的提取需要用到Ultimate Vocal Remover,这是一个基于深度学习的人声、伴奏分离工具:

github.com/Anjok07/ultimatevocalremovergui

GitHub上有下载地址:

https://github.com/Anjok07/ultimatevocalremovergui/releases/download/v5.5.0/UVR_v5.5.1_setup.exe

下载好Ultimate Vocal Remover,需要分别去除伴奏、和声,才能得到干净的人声:

(1)去除伴奏

去除伴奏利用MDX-Net:

(2)去除和声

把去除伴奏了的歌曲文件,利用VR Architecture去除和声:

如果左下角Choose VR Model中只有1_HP-UVR,可以通过Download More Models下载6_HP-Karaoke-UVR这个模型。

最后就可以得到干净的人声了。

3. 音频切片

得到了干净的人声后,需要把音频切成30s以内的片段,且去除没有人声的片段,只保留有人声的片段。

音频切片需要用到开源的Audio Slicer工具:

github.com/flutydeer/audio-slicer

下载地址:Releases · flutydeer/audio-slicer

添加人声文件,设置好输出文件夹,采用默认设置就可以了:

最终得到的音频片段:

数据集准备好后,在.\so-vits-svc\dataset_raw文件夹中新建一个文件夹,命名为该音色的名字,例如:

.\so-vits-svc\dataset_raw\jayzhou

把所有声音片段放在都放在这个文件夹下。

三、模型训练

1. 导入训练集

确保激活了conda环境,且当前目录为.\so-vits-svc\,在command window中依次输入

python resample.py
python preprocess_flist_config.py
python preprocess_hubert_f0.py

2. 开始训练

导入训练集后,可以开始训练

python train.py -c configs/config.json -m 44k

如果成功开始训练,可以得到每个Epoch的时间、loss以及模型保存的信息:

建议至少训练1000个Epoch。

可以通过Ctrl+C停止训练。

四、音色替换

1. 准备干净的人声以及伴奏

so-vits-svc本质是对干净的人声进行音色替换,所以需要做替换的音频,也应该是干净的人声。

下载一首新的歌曲,重复提取人声那一部分,去除和声和伴奏。

去除伴奏的时候,不用勾选Vocal Only,这样就能得到歌曲的伴奏。在后面人声、伴奏混合时可以用到。

2. 打开WebUI

python .\webUI.py

Running on local URL: http://127.0.0.1:7860

在浏览器中输入http://127.0.0.1:7860,可以打开WebUI:

(1)加载模型

首先导入模型文件,模型文件所在位置:.\so-vits-svc\logs\44k\G_xxxx.pth

然后导入配置文件,配置文件所在位置:.\so-vits-svc\configs\config.json

导入这两个文件后,加载模型,如果成功加载,可以得到音色名称:

(2)导入歌曲并替换音色

将刚才准备的干净人声导入,点击音频转换即可得到转换后的音频:

五、人声伴奏混合

得到转换后的人声音频后,需要把人声和伴奏混合,最简单的方法是利用格式工厂的音频混合功能:

这种方法不能条件人声和伴奏的比例,如果想要更好地去混音,可以利用AU等专业的音乐处理软件。

Original Link: http://ibillxia.github.io/blog/2025/03/16/music-cover-by-so-vits-svc/
Attribution - NON-Commercial - ShareAlike - Copyright © Bill Xia