python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤
标签: python 深度学习 tensorflow ffmpeg 视频处理
安装过程中所涉及到的库有两种安装方式:通过pip或者conda安装。本次测试通过pip安装,使用镜像为清华源和豆瓣源。
安装moviepy
moviepy包是一个用来处理视频的库。这个库是Python视频编辑库,可裁剪、拼接、标题插入、视频合成、视频处理和自定义效果。
1.使用pip install moviepy安装,报错

2.使用豆瓣镜像下载
pip install moviepy -i http://pypi.douban.com/simple --trusted-host=pypi.douban.com

安装ffmpeg
1.去官网下载ffmpeg(windows版本),并解压(解压到压缩文件名的文件夹)
2.在windows上配置系统环境变量Path
3.pip install ffmpeg-python
安装spleeter库
1.直接安装:
pip install --user spleeter
2.豆瓣镜像:
pip install --user spleeter -i https://pypi.doubanio.com/simple
3.不再手动训练,直接使用官方预测模型。目前spleeter提供三种音轨分离方式,其中:
- Vocals (singing voice) / accompaniment separation (2 stems) —两个音轨:背景和人声
- Vocals /drums / bass / other separation (4 stems) —四个音轨
- Vocals / drums / bass /piano / other separation (5 stems)—五个音轨
可以自由选择。本次选择2stems模型进行背景与人声分离,手动下载安装过程如下:
- github下载2stems.tar.gz
https://github.com/deezer/spleeter/releases

- 解压到C:\Users$用户名$\pretrained_models\下

分离视频与音频
1.moviepy库代码及分离音频后输出结果
from moviepy.editor import *
video = VideoFileClip('E:/movies/1.mp4')
audio = video.audio
audio.write_audiofile('E:/movies/1_s.mp3')
print('输出结束')


2.不安装moviepy视频编辑库可以直接使用ffmpeg-python库,代码实现略复杂。在Windows环境下,如果安装好了ffmpeg也可以直接使用命令行直接提取视频流中的aac音频信息。
ffmpeg -i E:/movies/1.mp4 -vn -y -acodec copy E:/movies/1s.aac

3.有时在视频编辑场景中需要将视频流提取出来进行编辑,比如给视频重新配音等,这时就需要单独提取视频流了,用ffmpeg的命令提取出视频文件的H264视频流如下:
ffmpeg -i E:/movies/1.mp4 -an -vcodec copy E:/movies/out.h264

分离人声与背景声
如果是pip安装好的spleeter,可以直接在base环境中输入上面的命令,如果是conda,需要先进入spleeter-cpu环境,在此环境下输入命令。
1.使用spleeter分离音频中的人声与背景声
Python -m spleeter separate -i E:/movies/1s.mp3 -p spleeter:2stems -o E:/movies/output
2.报错:tensorflow DDL失败,找不到指定模块

3.查看python版本,当前python版本为3.7,不支持高版本的tensorflow
conda info

4.卸载原本tensorflow
pip uninstall tensorflow
pip uninstall spleeter

5.重新安装旧版本1.15的tensorflow(python3.7无法安装tensorflow1.5,故选择1.15),和1.5的spleeter,使用豆瓣源
pip install --user --index-url https://pypi.douban.com/simple tensorflow==1.15
pip install --user spleeter==1.5 -i https://pypi.doubanio.com/simple
再次分离
1.执行命令
Python -m spleeter separate -i E:/movies/1s.mp3 -p spleeter:2stems -o E:/movies/output
- -m: python的写法,表示指定模块,在此处表示使用spleeter模块
- -p: 指定预测模型
- -i: 要进行分离的音频数据(建议使用绝对地址,否则可能出现WinErr2)
- -o: 分离出的音轨数据wav文件所在文件夹
上述命令是将1s.mp3分离为伴奏和人声,并存放到E:/movies/output文件夹中,2stems的输出为:
- E:/movies/output/1s/accompaniment.wav
- E:/movies/output/1s/vocals.wav
- 其伴奏为accompaniment.wav
- 人声文件为vocals.wav
在使用的时候,第一次会在项目目录C:\Users$用户名$\pretrained_models\下载需要的预测模型。可能比较大,可以耐心等待或受到下载。见安装spleeter库-3.安装预测模型

2.查看分离结果



- 伴奏文件:accompaniment.wav
- 人声文件:vocals.wav
合成视频流与伴奏文件
1.执行合成命令
ffmpeg -i E:/movies/out.h264 -i E:/movies/output/1s/accompaniment.wav E:/movies/out.mp4
上述命令会把视频文件原声音或者是音轨取消,无论是否有声音都需要做这个步骤。若音频比视频长,画面停留在最后一帧,继续播放声音。

2.查看输出结果

其他可能出现的报错
1.FileNotFoundError: [WinError 2] 系统找不到指定的文件
根据错误提示:找到lib中的subprocess.py文件
将subprocess.py 中第684行的 shell 值改为 True


2.UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb2 in position 10: invalid start byte
根据错误提示:找到ffmpeg.py 文件将第76行的.format(e.stderr.decode())) 改为
.format(e.stderr.decode(“utf8”, “ignore”)))

C:\Users\EDZ\AppData\Roaming\Python\Python37\site-packages\spleeter\audio\ffmpeg.py

3.spleeter:ffprobe error (see stderr output for detail)
ffmpeg没安装好 重新安装ffmpeg
4.AttributeError: module ‘ffmpeg’ has no attribute ‘probe’

安装ffmpeg时最后执行的命令为pip install ffmpeg-python,而非ffmpeg或python-ffmpeg。如果出错需要重新下载安装:pip uninstall 文件名。
参考文章
ffmpeg音视频文件音视频流抽取,初步尝试人声分离
【Spleeter】实验记录——音轨分离软件spleeter的安装
Spleeter工具简单分析
安装 使用spleeter出现的问题
智能推荐
文本特征提取之词袋模型
跟我一起机器学习系列文章将首发于公众号:月来客栈,欢迎文末扫码关注! 1 引例 在前面几讲的示例介绍中,我们所用到的数据集都是别人已经处理好的数据集,换句话说这些数据集的每个特征维度都已经是数值了。但是在实际的建模任务中,我们拿到的数据集并不是这样的形式。例如接下来我们要完成的一个任务:对中文垃圾邮件进行分类。 为什么两个人在一起会有爱情呢? 爱真的需要勇气 把自己的内心毫无保留的展示给对方 也勇...
语音特征提取技术——MFCC
简介 MFCC是一种语音特征提取技术,它产生与20世纪80年代。MFCC为了从人发出的音频中去除噪音和情感的影响,提取特征值便于我们进行进一步的分析。 人的发声由很多部位共同影响的结果,如嘴形、牙齿等因素,这种形状可以决定声音的输出。如果我们可以精确的确定形状,那么我们就可以对发出的因素进行科学的表示。这篇文章将带你走进MFCC技术,解释它为什么能够很好的用于语音识别领域以及如何实现它。 首先我们...
python图像特征提取
这里使用的是python 3.6 、opencv_python-3.4.0+contrib,特征提取的代码如下: 结提取果: keypoints, descriptor = sift.detectAndCompute(gray,None),这里的descriptor是一个向量或者应该可以转换成向量...
声学特征提取-python
声学特征提取-python 代码在我的github上AcousticFeatureExtraction 使用Librosa音频处理库和openSMILE工具包,进行简单的声学特征提取,包括韵律学特征(持续时间、短时能量、过零率、基频等)、基于谱的相关特征(MFCC特征)和声音质量特征(共振峰、频率微扰、振幅微扰)。 如果您觉得有一点点用,请隔空比个心(或者,去我的github上点一下 &ldquo...
python基础(《Python编程从入门到实践》笔记)K
python基础语法 本笔记是对这本书的基础语法部分进行了学习: 因为本身有其他语言的编程基础,所以笔记仅仅对我自不熟悉的部分进行了记录 函数...
猜你喜欢
QT(C++)面试总结
参考博客 QT信号槽机制的优缺点 (1)问题: 为什么Qt使用信号与槽机制而不是传统的回调函数机制进行对象间的通信呢? 回调函数的本质是“你想让别人的代码执行你的代码,而别人的代码你又不能动”这种需求下产生的。 回调函数是函数指针的一种用法,如果多个类都关注某个类的状态变化,此时需要维护一个列表,以存放多个回调函数的地址。对于每一个被关注的类,都需要做类似的工作,因此这种做...
【数据结构】栈与队列的面试题(一)
栈的简单认识和基本操作:点击打开链接 队列的简单认识和基本操作:点击打开链接 一.实现一个栈,要求实现Push(出栈),Pop(出栈),Min(返回最小值)的时间复杂度为O(1)。 (1.)方法一:创建两个栈来实现(Stack1,Stack2) &...
Pytorch设置random.seed()随机种子
转载自:https://blog.csdn.net/qq_16234613/article/details/81356876,本文只做个人记录学习使用,版权归原作者所有。 测试: 可以看到random.seed()对于import的文件同样有用。而且当你设置一个随机种子时,接下来的随机算法生成数可按照当前的随机种子按照一定规律生成。也就是一个随机种子就能重现随机生成的序列。 当随机种子设置在b文件...
