python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤

安装过程中所涉及到的库有两种安装方式:通过pip或者conda安装。本次测试通过pip安装,使用镜像为清华源和豆瓣源。

安装moviepy

moviepy包是一个用来处理视频的库。这个库是Python视频编辑库,可裁剪、拼接、标题插入、视频合成、视频处理和自定义效果。
1.使用pip install moviepy安装,报错
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第1张图片
2.使用豆瓣镜像下载

pip install moviepy -i http://pypi.douban.com/simple --trusted-host=pypi.douban.com

python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第2张图片

安装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
    python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第3张图片
  2. 解压到C:\Users$用户名$\pretrained_models\下
    python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第4张图片

分离视频与音频

1.moviepy库代码及分离音频后输出结果

from moviepy.editor import *

video = VideoFileClip('E:/movies/1.mp4')
audio = video.audio
audio.write_audiofile('E:/movies/1_s.mp3')
print('输出结束')

python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第5张图片
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第6张图片
2.不安装moviepy视频编辑库可以直接使用ffmpeg-python库,代码实现略复杂。在Windows环境下,如果安装好了ffmpeg也可以直接使用命令行直接提取视频流中的aac音频信息。

ffmpeg -i E:/movies/1.mp4 -vn -y -acodec copy E:/movies/1s.aac

python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第7张图片
3.有时在视频编辑场景中需要将视频流提取出来进行编辑,比如给视频重新配音等,这时就需要单独提取视频流了,用ffmpeg的命令提取出视频文件的H264视频流如下:

ffmpeg -i E:/movies/1.mp4 -an -vcodec copy E:/movies/out.h264

python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第8张图片

分离人声与背景声

如果是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失败,找不到指定模块
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第9张图片
3.查看python版本,当前python版本为3.7,不支持高版本的tensorflow

conda info

python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第10张图片
4.卸载原本tensorflow

pip uninstall tensorflow
pip uninstall spleeter

python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第11张图片
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.查看分离结果
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第12张图片
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第13张图片
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第14张图片

  • 伴奏文件:accompaniment.wav
  • 人声文件:vocals.wav

合成视频流与伴奏文件

1.执行合成命令

ffmpeg -i E:/movies/out.h264  -i E:/movies/output/1s/accompaniment.wav E:/movies/out.mp4

上述命令会把视频文件原声音或者是音轨取消,无论是否有声音都需要做这个步骤。若音频比视频长,画面停留在最后一帧,继续播放声音。
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第15张图片
2.查看输出结果
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第16张图片

其他可能出现的报错

1.FileNotFoundError: [WinError 2] 系统找不到指定的文件
根据错误提示:找到lib中的subprocess.py文件
将subprocess.py 中第684行的 shell 值改为 True
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第17张图片
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第18张图片
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”)))
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第19张图片
C:\Users\EDZ\AppData\Roaming\Python\Python37\site-packages\spleeter\audio\ffmpeg.py
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第20张图片
3.spleeter:ffprobe error (see stderr output for detail)
ffmpeg没安装好 重新安装ffmpeg
4.AttributeError: module ‘ffmpeg’ has no attribute ‘probe’
python语音特征提取之使用ffmpeg与spleeter实现视频人声过滤_第21张图片
安装ffmpeg时最后执行的命令为pip install ffmpeg-python,而非ffmpeg或python-ffmpeg。如果出错需要重新下载安装:pip uninstall 文件名。

参考文章
ffmpeg音视频文件音视频流抽取,初步尝试人声分离
【Spleeter】实验记录——音轨分离软件spleeter的安装
Spleeter工具简单分析
安装 使用spleeter出现的问题

你可能感兴趣的:(python,python,深度学习,tensorflow,ffmpeg,视频处理)