环境装置
自主装置 FFmpeg
pip install jupyter
pip install spleeter
思路
spleeter 工具可在 command 逐个拆散, 有些吃力。
并且文件名不许有空格和特殊字符。
本想通过 py 脚本,批处理(os.system/os.subprocess)做些脚本操作。
然而 spleeter 隐式搜寻 FFmpeg。所以(os.system/os.subprocess)都搜不到 FFmpeg
即便内 / 外增加环境变量也不行。
起初没方法,想个歪的。
用 jupyter notebook 的 ! 指令嵌套循环实现。
Jupyter Notebook 代码
import re
import os
import shutil
music_list = os.listdir('音乐')
r1 = re.compile(r'(\(.*?\)|(.*?)|\[.*?\]|\s*?|【.*?】|《.*?》)')
new_music_list = [r1.sub('',per_music) for per_music in music_list]
%cd 音乐
name_map = zip(music_list, new_music_list)
for old_name,new_name in name_map:
try:
os.rename(old_name,new_name)
except:
pass
new_name_list = os.listdir('.')
for filename in new_name_list:
if filename.endswith('jpg'):
continue
print(filename)
try:
!spleeter separate -i {filename} -p spleeter:2stems -o output
except:
pass
music_list = os.listdir('音乐')
# 不便复制,output 和 pretrained_models 挪动了进去
[shutil.copy(f'output/{music.rsplit(".",1)[0]}/accompaniment.wav', f'D:/music/acc/{music}') for music in music_list if music.rsplit(".",1)[1] != 'jpg' and music not in ['pretrained_models','output']]
# 我只听伴奏,所以人声就免了。。# [shutil.move(f'output/{music.rsplit(".",1)[0]}/vocals.wav', f'D:/music/voice/{music}') for music in music_list if music.rsplit(".",1)[1] != 'jpg' and music not in ['pretrained_models','output']]