去除人声--安装和使用spleeter分离人声和背景声

在实现过程中遇到了一些问题也在此记录下来,希望大家能少踩这些坑。


前言

最近处理音视频,想把音频中的人声去掉,保留背景音乐。网上说AU 有人声移除的功能,我想AU竟然如此强大,于时去下载了AU,去除人声之后,整个都没有声音了。原因可能是:原音频看起来是立体声,实际上左声道和右声道是相同的,而人声消除的原理恰恰是消除左声道与右声道相同的声音,这样一搞自然就什么声音都没了。之后发现网上有很多吐槽AU的中置声道提取 。
*‘AU的中置声道提取算法就是个垃圾’ *

就好像:需要扣掉照片的主体保留背景,结果直接拿剪子在照片中间剜个洞。


后来看到github上面有spleeter,效果比AU好多了,下面是安装使用过程

一、最后效果是什么样的

成功分离出人声和背景声

在这里插入图片描述

二、安装FFmpeg(不能跳)

注意FFmpeg这步必须安装

因为spleeter库依赖FFmpeg

1.打开官网

http://ffmpeg.org/download.html
下面以windows 64bit为例,不要点击绿色Download 标识,点击下面windows图标
在这里插入图片描述
点击第二行,进入github
在这里插入图片描述
下载win64-gpl.zip,如果下载速度太慢,半天下载不来,进入这个github加速网站
直接输入下载的网址:

https://github.com/BtbN/FFmpeg-Builds/releases

在这里插入图片描述
FFmpeg分为3个版本:Static、 Shared、 Dev
这篇博客有说明:https://www.jianshu.com/p/7ed3be01228b

下载完之后解压,进入到bin目录,看到3个文件
在这里插入图片描述
复制bin目录所在文件路径,进入下一步,设置环境变量

系统变量->选择PATH条目
在这里插入图片描述
双击->新建->将bin目录路径添加进去。
在这里插入图片描述
打开cmd命令行窗口,输入命令ffmpeg –version

在这里插入图片描述
出现ffmpeg版本信息,说明安装成功。

三、安装spleeter模块

1.通过Anaconda创建一个虚拟环境

为了程序的稳定性,建议先通过Anaconda创建一个环境专门用来运行Spleeter,命名为music,选择python3.6。
在这里插入图片描述
点击三角按钮,选择open in Terminal,进入虚拟环境,输入下面命令
注意:我刚开始创建了Python3.6的虚拟环境,结果输入下面命令不行,于时改成3.7版本,就可以了。

conda install -c conda-forge spleeter

安装完成后,窗口会自动清屏并出现一个done
在这里插入图片描述

2.下载预训练模型

下载地址,点击这里
https://github.com/deezer/spleeter/releases/tag/v1.4.0
我这里下载了最通用的2stem分离,就是人声和背景声
在这里插入图片描述
新建一个spleeter工作文件夹,我这里命名为location,在location文件夹中建立一个pretrained_models文件夹
将下载的2stem解压到C:\location\pretrained_models中。

3.文件结构(要特别注意)

1.在spleeter工作文件夹location中新建output文件夹,作为分离后的音频输出的地方。
2.将音频也放在spleeter工作目录中。
在这里插入图片描述
上面文件结构存放最好保持一致,不然下面运行之后又可能出现一大推错误,血泪教训。

四、使用spleeter分离人声和背景声

  1. 打开创建的虚拟环境命令行,切换目录到spleeter工作文件夹location中,cd C:\location
  2. 输入命令
spleeter separate -i C:/location/Confucius.mp3 -p spleeter:2stems -o C:/location/output/

在这里插入图片描述
成功在output文件夹中输出。
output文件夹中多出来一个以音频名命名的文件夹
在这里插入图片描述
在这里插入图片描述

错误示范

没有搞清楚文件结构,应建立哪些文件,分别装什么,以至于出现很多错误,安装成功,就不需要往下看了。

下面以人声分离为例
新建一个2stems文件夹
https://github.com/deezer/spleeter/releases
进入这个下载地址,下载Source code (tar.gz)
在这里插入图片描述
解压到2stems文件夹中

输入命令,分离人声

spleeter separate -p spleeter:2stems -o C:/Users/Desktop C:/Users/Desktop/music.mp3

但遇到下面错误

usage: spleeter separate [-h] [-a AUDIO_ADAPTER] [-p CONFIGURATION]
                         [--verbose] -i INPUTS [INPUTS ...] [-o OUTPUT_PATH]
                         [-f FILENAME_FORMAT] [-d DURATION] [-s OFFSET]
                         [-c {wav,mp3,ogg,m4a,wma,flac}] [-b BITRATE] [-m]
                         [-B {tensorflow,librosa,auto}]
spleeter separate: error: the following arguments are required: -i/--inputs

再换下面这个命令

------spleeter指令--|----目标文件-----|----输出目录------|
spleeter separate -c mp3 C:/Users/Desktop/music.mp3 -o C:/Users/Desktop

还是有这个错误
这个错误意思是:
spletter separate:错误:需要以下参数:i/-inputs
换成下面这个命令,有-i参数
python -m spleeter separate -i C:/Users/Desktop/music.mp3 -p spleeter:2stems -o C:/Users/Desktop

一直遇到下面这个错误
在这里插入图片描述

Traceback (most recent call last):
  File "C:\develop\anaconda3\envs\Py37_music\Scripts\spleeter-script.py", line 10, in <module>
    sys.exit(entrypoint())
  File "C:\develop\anaconda3\envs\Py37_music\lib\site-packages\spleeter\__main__.py", line 54, in entrypoint
    main(sys.argv)
  File "C:\develop\anaconda3\envs\Py37_music\lib\site-packages\spleeter\__main__.py", line 46, in main
    entrypoint(arguments, params)
  File "C:\develop\anaconda3\envs\Py37_music\lib\site-packages\spleeter\commands\separate.py", line 45, in entrypoint
    synchronous=False
  File "C:\develop\anaconda3\envs\Py37_music\lib\site-packages\spleeter\separator.py", line 228, in separate_to_file
    sources = self.separate(waveform, audio_descriptor)
  File "C:\develop\anaconda3\envs\Py37_music\lib\site-packages\spleeter\separator.py", line 195, in separate
    return self._separate_librosa(waveform, audio_descriptor)
  File "C:\develop\anaconda3\envs\Py37_music\lib\site-packages\spleeter\separator.py", line 180, in _separate_librosa
    sess = self._get_session()
  File "C:\develop\anaconda3\envs\Py37_music\lib\site-packages\spleeter\separator.py", line 161, in _get_session
    saver.restore(self._session, latest_checkpoint)
  File "C:\develop\anaconda3\envs\Py37_music\lib\site-packages\tensorflow_core\python\training\saver.py", line 1277, in restore
    raise ValueError("Can't load save_path when it is None.")
ValueError: Can't load save_path when it is None.

原来是模型还没有生成,就去训练。
参考博客

https://blog.csdn.net/qq_39377418/article/details/97135361?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165183023516782388011424%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165183023516782388011424&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-97135361-null-null.nonecase&utm_term=spleeter++raise+ValueError%28Cant+load+save_path+when+it+is+None.%29+ValueError%3A+Cant+load+save_path+when+it+is+None.&spm=1018.2226.3001.4450

解决方案:
建议在某个盘的根目录里新建一个全英文的文件夹(尽量不要出现中文或者特殊符号,因为这样它有可能会找不到路径,会报错)用于存放你将要处理的MP3或者wav文件,其次你本身要处理的文件的名字也应该是全英文
参考博客:
https://blog.csdn.net/qq_44976743/article/details/108632618
但是还是不行。
最后才发现是预训练模型下载错了
在这里插入图片描述
github页面往下滑才发现应该下载下面Spleeter public release
分离人声和背景音乐就下载2stems.tar.gz
在这里插入图片描述
文件夹中只有这几个文件

在这里插入图片描述
最后再次输入命令
在这里插入图片描述
结果还是报错。
又仔细搜寻其他博客,一个字一个字,仔细瞅了,才发现是要切换到spleeter工作目录下

我把工作目录命名为location,文件结构如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到

INFO:spleeter:File C:/location/output/Confucius/accompaniment.wav written succesfully
INFO:spleeter:File C:/location/output/Confucius/vocals.wav written succesfully

输出成功了,output文件夹中多出了一个文件夹
在这里插入图片描述
在这里插入图片描述


总结

终于将一段音频实现了人音和伴奏分离了,效果还不错,可能人音部分还是又一点伴奏声音,不过我主要想要这段音频的伴奏,自己进行配音。
总结整个实现过程最困难的就是一直报

raise ValueError("Can't load save_path when it is None.")
ValueError: Can't load save_path when it is None.

这个错误,让我整了半天,才整出来,最主要原因还是文件结构以及路径的问题,这点一定要仔细。
仔细安装,一步一步来就没有什么大问题。

参考文献:
https://zhuanlan.zhihu.com/p/324472015

https://zhuanlan.zhihu.com/p/149944571

https://tancolin.blog.csdn.net/article/details/122572573?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5-122572573-blog-115488883.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5-122572573-blog-115488883.pc_relevant_default&utm_relevant_index=6

https://www.bilibili.com/read/cv13211840

  • 10
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据提供的引用内容,Spleeter 是一种用于音频源分离的工具。它可以将音频文件中的不同音频源(如人声、伴奏等)分离出来。然而,Spleeter分离效果可能受到多种因素的影响,包括音频质量、音乐类型和分离轨道的选择等。因此,在使用 Spleeter 进行人声分离时,可能需要根据具体情况进行调整和优化,以获得更好的分离效果。\[1\]\[2\] 至于 Spleeter 的具体原理,它使用了深度学习技术,特别是神经网络模型。该模型经过训练,可以学习到不同音频源的特征,并根据这些特征将音频信号分离成不同的源。具体来说,Spleeter 使用了一种称为 U-Net 的神经网络结构,该结构可以有效地处理音频信号的分离任务。通过将输入音频信号传递给神经网络模型,Spleeter 可以将音频信号分离成多个源,例如人声和伴奏。\[1\]\[2\] 需要注意的是,Spleeter分离结果可能并不完美,因为分离效果受到多种因素的影响。因此,在使用 Spleeter 进行音频源分离时,可能需要进行多次尝试,并根据具体情况进行参数和设置的调整,以获得最佳的分离效果。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* [Spleeter人声分离一个基于深度学习的音频源分离工具](https://blog.csdn.net/polsnet/article/details/130193997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [去除人声--安装使用spleeter分离人声背景](https://blog.csdn.net/qq_44985985/article/details/124568150)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值