Page MenuHomePhabricator

readme.txt
No OneTemporary

readme.txt

自动翻唱工具
简介: 输入原唱音频,自动进行人声伴奏分离,将人声进行音色转换,然后和伴奏合并,输出翻唱后的音频
目前有两种方案:
1. 变调(线上方案):
优点: 效果好,高质量率达到100%
缺点: 很容易被变换会原唱的音色
2. so-vits-svc方案
优点: 将原唱可以合成成任意特定人的音色,不容易被变换回原唱的音色
缺点: 针对于分离出的人声来做时效果较差,主要体现在多人和声部分、混响较大部分、乐器部分
变调方案(线上):
1. 环境部署
从sg-prod-ipaint-gpu-1机器上将 /opt/soft/bin/tone_shift_exe、/opt/soft/bin/simple_mixer 拷贝到要部署的机器
安装python环境:
环境安装:
conda create -n auto_song_cover python=3.9
# 安装demucs环境[进入到ref.music_remover 执行pip install -r requirements.txt]
pip install librosa
pip install scikit-maad
pip install praat-parselmouth
pip install matplotlib
pip install torchvision
pip install madmom
pip install torchstat
环境设置:
export PATH=$PATH:/data/gpu_env_common/env/bin/ffmpeg/bin
export PYTHONPATH=$PWD:$PWD/ref/music_remover/demucs
export LD_LIBRARY_PATH=/data/gpu_env_common/env/anaconda3/envs/so_vits_svc/lib:$LD_LIBRARY_PATH
2. 快速使用
本方案的操作是从曲库的数据库获取到任务信息,然后进行消音、变调、合并处理后,再交付任务到数据库(详细逻辑见代码)
/data/gpu_env_common/env/anaconda3/envs/auto_song_cover/bin/python online/tone_shift_one.py
# 音视频部署方案:
目前已经将模型和环境全部放到共享盘上:
挂载: sudo mount -t nfs -o vers=4 172.17.1.64:/ /data
模型以及二进制文件地址: /data/gpu_env_common/res/av_svc
在当前目录下,执行操作:
conda activate music_remover_env
export PYTHONPATH=$PWD:$PWD/ref/music_remover/demucs
python3 online/tone_shift_one.py
合成方案:
1. 环境部署
在变调方案的基础上:
# 安装so_vits_svc环境[进入到ref.so_vits_svc 执行pip install -r requirements.txt]
export PYTHONPATH=$PWD:$PWD/ref/music_remover/demucs:$PWD/ref/so_vits_svc:$PWD/ref/split_dirty_frame
2. 快速使用(单独处理一个)
/data/gpu_env_common/env/anaconda3/envs/auto_song_cover/bin/python online/inference_one.py
其训练方案详情见script/train.sh
3. 注意: 预训练模型地址:
https://av-audit-sync-sg-1256122840.cos.ap-singapore.myqcloud.com/hub/models/so_vits_svc/G_0.pth
https://av-audit-sync-sg-1256122840.cos.ap-singapore.myqcloud.com/hub/models/so_vits_svc/D_0.pth
-----------------------------------------------------------------------------------------------------------------------
历史介绍:
自动翻唱工具
1. 训练音色
2. 给定音频,将音频按照特定音色进行转换
----data // 所有数据的位置
----ref // 依赖的代码的位置
----music_remover // 消音工具
----so-vits-svc // 训练音色和变声的工具
----script // 脚本位置
3. data结构介绍:
---train_users // 训练时使用的数据集
---zjl // 每个音色
---src // 源数据(文件夹)
---vocals // 消音之后的数据(文件夹)
---speaker0 // 切片之后的数据(文件夹)
---slice_resample // 重采样规整之后的数据(文件夹)
---speaker0 // 重采样规整之后的数据(文件夹)
---filelists // 训练时需要使用的文件夹
---train.txt
---val.txt
---test.txt
---config // 配置文件
---config.json // 配置文件
---inf_users // 推理时要用的数据
---song1 // 每个测试时输入的歌曲
---src // 源数据(文件)
---vocals // 分离出的人声文件
---acc // 分离出的伴奏文件
---song2
...
---out_data // 推理出的数据
---song1 // 每个歌曲
---song1_zjl_vocals // 歌曲和音色组成的结果人声
---song2
....
---final_data // 最终结果
---song1 // 每个歌曲
---song1_zjl_mix // 歌曲和音色组成的结果人声混音之后的结果
---------------------------------------------------------------------->>>>
快速使用之训练:
将数据放到data/train_users/xxx/src目录下,以ogg作为结尾
然后执行script/train.sh xxx 即可,输出的模型在data/train_users/xxx/logs/32k目录下
---------------------------------------------------------------------->>>>
训练过程:
环境变量:
export LD_LIBRARY_PATH=/data/gpu_env_common/env/anaconda3/envs/so_vits_svc/lib:$LD_LIBRARY_PATH
export PATH=$PATH:/data/gpu_env_common/env/bin/ffmpeg/bin
export PYTHONPATH=$PWD:$PWD/ref/music_remover/demucs
# 训练过程
1. 收集数据放到data/train_users/zjl/src
2. 提取人声 & 分片 & 取音量响度大的Top80
/data/gpu_env_common/env/anaconda3/envs/demucs/bin/python script/get_vocals_for_train.py zjl
3. 重采样
/data/gpu_env_common/env/anaconda3/envs/so_vits_svc/bin/python ref/so-vits-svc/resample.py --in_dir=/data/rsync/jianli.yang/AutoCoverTool/data/train_users/zjl --out_dir2=/data/rsync/jianli.yang/AutoCoverTool/data/train_users/zjl/slice_resample
4. 生成配置文件
/data/gpu_env_common/env/anaconda3/envs/so_vits_svc/bin/python ref/so-vits-svc/preprocess_flist_config.py --source_dir=/data/rsync/jianli.yang/AutoCoverTool/data/train_users/zjl/slice_resample --train_list=/data/rsync/jianli.yang/AutoCoverTool/data/train_users/zjl/filelists/train.txt --val_list=/data/rsync/jianli.yang/AutoCoverTool/data/train_users/zjl/filelists/val.txt --test_list=/data/rsync/jianli.yang/AutoCoverTool/data/train_users/zjl/filelists/test.txt --config_path=/data/rsync/jianli.yang/AutoCoverTool/data/train_users/zjl/config/config.json
5. 预处理提取特征
/data/gpu_env_common/env/anaconda3/envs/so_vits_svc/bin/python ref/so-vits-svc/preprocess_hubert_f0.py --in_dir=/data/rsync/jianli.yang/AutoCoverTool/data/train_users/zjl/slice_resample
6. 拷贝数据到logs文件夹
mkdir -p data/train_users/zjl/logs/32k
cp -r data/models/G_0.pth data/train_users/zjl/logs/32k
cp -r data/models/D_0.pth data/train_users/zjl/logs/32k
7. 训练
/data/gpu_env_common/env/anaconda3/envs/so_vits_svc/bin/python ref/so-vits-svc/train.py -c data/train_users/zjl/config/config.json -m 32k -l data/train_users/zjl/logs
# 推理过程
1. 将输出放入data/inf_users/pfdyt/src.mp3
2. 提取人声、伴奏
/data/gpu_env_common/env/anaconda3/envs/demucs/bin/python script/get_vocals_for_inference.py data/inf_users/test_2/src.mp3 data/inf_users/test_2
3. 推理
/data/gpu_env_common/env/anaconda3/envs/so_vits_svc/bin/python ref/so-vits-svc/inference_main.py data/train_users/zjl/logs/32k/G_2000.pth data/train_users/zjl/config/config.json data/inf_users/pfdyt/vocal_32.wav data/out_data/pfdyt/pfdyt_zjl.wav
4. 获取占比信息,剔除占比过高的音频
/data/gpu_env_common/env/anaconda3/envs/th1_9_3_9/bin/python script/process_one.py
5. 对符合要求的音频进行降噪和拉伸
/opt/soft/bin/denoise_exe in_wav out_wav
/opt/soft/bin/draw_volume in_wav ref_wav out_wav
6. 手动制作, 使用 accentize/Chameleon 插件,复制原始wav的混响,以及调整响度大小
7. 用手动制作好的数据进行再次替换
/data/gpu_env_common/env/anaconda3/envs/th1_9_3_9/bin/python script/process_one.py
8. 将替换好的成品和伴奏混合,得到结果
/opt/soft/bin/simple_mixer in_wav acc_path mix_path
4. 将干声重采样
ffmpeg -i data/out_data/pfdyt/pfdyt_zjl.wav -ar 44100 -ac 2 data/out_data/pfdyt/pfdyt_zjl_44_2.wav
5. 合成
/data/rsync/jianli.yang/AutoCoverTool/data/bin/mixer data/models/impluse_im_plus_wet2.wav data/out_data/pfdyt/pfdyt_zjl_44_2.wav data/inf_users/pfdyt/acc.wav data/final_data/pfdyt_zjl_44_2_mix.wav

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 24, 19:39 (19 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1326491
Default Alt Text
readme.txt (8 KB)

Event Timeline