乐趣区

关于python:PY-音声分离

环境装置

自主装置 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']]
退出移动版