Singing Voice Conversion

基于so-vits-svc的唱歌声音转换。

Singing Voice Conversion

本文由ChatGPT润色生成

基于so-vits-svc的唱歌声音转换。

准备工作

  • 克隆代码并安装依赖
git clone https://github.com/svc-develop-team/so-vits-svc.git

conda create -n aisinger python=3.8
cd so-vits-svc
pip install -r requirements.txt
  • 下载预训练模型 checkpoint_best_legacy_500.pt,并将其放置在 pretrain 目录下
  • 下载自定义模型,包括
    • G_xxx.pth
    • config.json
    • kmeans_xxx.pt(可选)
  • 使用 spleeter 来分离人声和伴奏

选项 1(推荐):谷歌 Colab

spleeter separate -o output/ xxx.mp3

选项 2(不适用于 M1 Mac):我们也可以在本地使用 docker

docker run -v $(pwd)/output:/output deezer/spleeter:3.8 separate -o /output xxx.mp3

它将生成两个文件:vocals.wavaccompaniment.wavvocals.wav 是用于转换的。

入门

我们可以打开 webui 来转换 wav

python -u webUI.py

或者直接使用 cli 进行转换

python inference_main.py \
    -m "logs/44k/G_27200.pth" \
    -c "configs/config.json" \
    -n "/path/to/vocals.wav" \
    -t 0 \
    -s "sun" \
    -cm "logs/44k/kmeans_10000.pt"

生成的 wav 存放在 results 目录下,然后我们使用 ffmpeg 合并两个 wav

ffmpeg -i ../../results/sun_1687426444.wav -i accompaniment.wav -filter_complex amix=inputs=2:duration=longest output_1687426444.wav

使用 ffmpeg 将 wav 转换为 mp3

ffmpeg -i output_1687426444.wav -vn -ar 44100 -ac 2 -b:a 192k output_1687426444.mp3

我们还可以将两个步骤合并为一个步骤

ffmpeg -i ../../results/sun_1687426444.wav -i accompaniment.wav -filter_complex amix=inputs=2:duration=longest -vn -ar 44100 -ac 2 -b:a 192k output_1687426444.mp3

问题

RuntimeError: Given groups=1, weight of size [xxx, 256, xxx], expected input[xxx, 768, xxx] to have 256 channels, but got 768 channels instead

  • 这是由于编码器配置和模型权重之间的不匹配。我们可以修改 config.json 中的 speech_encoder
    {
        "model"
    + "speech_encoder": "vec256l9"
    }

参考资料

  • https://zhuanlan.zhihu.com/p/630115251
  • https://www.bilibili.com/read/cv22206231/