关于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']]

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理