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模型进行背景与人声分离,手动下载安装过程如下:

  1. github下载2stems.tar.gz
    https://github.com/deezer/spleeter/releases
    在这里插入图片描述
  2. 解压到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的输出为:

  1. E:/movies/output/1s/accompaniment.wav
  2. 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出现的问题

版权声明:本文为weixin_44253169原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44253169/article/details/111152524

智能推荐

文本特征提取之词袋模型

跟我一起机器学习系列文章将首发于公众号:月来客栈,欢迎文末扫码关注! 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基础语法 本笔记是对这本书的基础语法部分进行了学习: 因为本身有其他语言的编程基础,所以笔记仅仅对我自不熟悉的部分进行了记录 函数...

猜你喜欢

VUE脚手架html2canvas生成图片

长按识别二维码 下载插件 页面引入...

小程序login登录前后端实现

小程序login登录前后端实现 获取临时code 请求的接口 使用koa2 fly.js 登录验证 发送code...

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文件...