使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析

简介: 使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析

@toc

1 使用moviepy库包提取音频

1.1 moviepy库包说明

1、moviepy库包介绍

MoviePy是一个用于视频编辑的Python模块,它可以用于基本操作(如剪切、连接、标题插入)、视频合成(也称为非线性编辑)、视频处理,或创建高级效果。它可以读写最常见的视频格式,包括GIF。

2、moviepy参考文档

1.2 安装moviepy

直接使用pip安装即可:

pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple

1.2 使用moviepy提取视频中的音频

# 1、使用moviepy模块 提取视频中的音频文件
from moviepy.editor import AudioFileClip

my_audio_clip = AudioFileClip("./test.mp4")
print(type(my_audio_clip))  # <class 'moviepy.audio.io.AudioFileClip.AudioFileClip'>

#  提取视频中的音频文件  m4v,mp3等音频格式也是支持的
my_audio_clip.write_audiofile("./extract_audio.wav")
'''
MoviePy - Writing audio in ./extract_audio.wav
MoviePy - Done.
'''

2 使用librosa库包读取音频文件,并分析音频文件

2.1 librosa库包介绍

1、librosa是一个用于音乐音频分析的python包。它提供了创建音乐信息检索系统所必需的构建模块。

2、librosa参考文档

2.2 使用librosa读取音频文件,并分析音频文件

音频数据内容,可以认为记录了:采样频率 和 每个采样点的信号强度 两个部分构成一个音频文件

数据流可以理解为一个数组,按照字节存储

# 2、使用librosa分析音频
import librosa
import numpy as np

# 加载音频文件
audio, freq = librosa.load("./extract_audio.wav")
print(f"audio: {audio} and audio shape: {audio.shape}\nfreq: {freq}")
print(f"audio type: {type(audio)}\nfreq type: {type(freq)}")

time = len(audio) / freq
print(time)  # 94.3
'''
audio: [ 0.          0.          0.         ... -0.00216522 -0.00011788
 -0.00167476] and audio shape: (2079315,)
freq: 22050
audio type: <class 'numpy.ndarray'>
freq type: <class 'int'>


# 上面的这段音频 采样点共:2079315   采样频率为:22050
这段音频的时长为:2079315 / 22050 = 94.3   因此这段音频的时长约为94秒
也就是每秒采样 22050个数据
'''

上面有几个概念:

  • 音频采样点:就是在一段时间内,一共采集了多少个音频数据
  • 音频采样频率:就是在一秒内采样采样多少个采样点

因此可以根据音频采样点和音频采样频率,计算出音频的时长:

$$音频的时长 = \frac{音频采样点个数}{音频采样频率}$$

3 绘制音频信号的强度图

3.1 使用matplotlib绘制音频信号强度图

# 3、画出音频的信号强度图
import matplotlib.pyplot as plt

time = np.arange(0, len(audio)) / freq
# np.arange(0, len(audio))  = (0,1,2,3,...,2079314)
print(time.shape)  # (2079315,)
print(np.min(time), np.max(time))  # 94.29995464852608  0.0

fig, ax = plt.subplots()
ax.plot(time, audio)
ax.set(xlabel="Time(s)", ylabel="Sound Amplitude")
plt.show()
# 其实绘制的点一共有2079315个,但是由于我们的时间范围是0-94,因此音频信号看起来很拥挤

image.png

3.2 使用librosa画信号强度图

当然我们可以使用librosa 库的工具来分析,可以修掉音频首尾的其他信息,画信号强度图的方式如下:

# 4、使用librosa画信号强度图
# 当然我们可以使用 librosa 库的工具来分析,可以修掉音频首尾的其他信息,画信号强度图的方式如下:
import librosa.display

audio, _ = librosa.effects.trim(audio)
librosa.display.waveplot(audio, sr=freq)
plt.show()

image.png

完整代码如下:

__Author__ = "Shliang"
__Email__ = "shliang0603@gmail.com"


# 1、使用moviepy模块 提取视频中的音频文件
from moviepy.editor import AudioFileClip

my_audio_clip = AudioFileClip("./test.mp4")
print(type(my_audio_clip))  # <class 'moviepy.audio.io.AudioFileClip.AudioFileClip'>

#  提取视频中的音频文件  m4v,mp3等音频格式也是支持的
# my_audio_clip.write_audiofile("./extract_audio.wav")
'''
MoviePy - Writing audio in ./extract_audio.wav
MoviePy - Done.
'''

# 2、使用librosa分析音频
# 音频数据内容,可以认为记录了:采样频率 和 每个采样点的信号强度 两个部分构成一个音频文件
# 数据流可以理解为一个数组,按照字节存储
import librosa
import numpy as np

# 加载音频文件
audio, freq = librosa.load("./extract_audio.wav")
print(f"audio: {audio} and audio shape: {audio.shape}\nfreq: {freq}")
print(f"audio type: {type(audio)}\nfreq type: {type(freq)}")

time = len(audio) / freq
print(time)  # 94.3
'''
audio: [ 0.          0.          0.         ... -0.00216522 -0.00011788
 -0.00167476] and audio shape: (2079315,)
freq: 22050
audio type: <class 'numpy.ndarray'>
freq type: <class 'int'>


# 上面的这段音频 采样点共:2079315   采样频率为:22050
这段音频的时长为:2079315 / 22050 = 94.3   因此这段音频的时长约为94秒
也就是每秒采样 22050个数据

'''


# 3、画出音频的信号强度图
import matplotlib.pyplot as plt

time = np.arange(0, len(audio)) / freq
# np.arange(0, len(audio))  = (0,1,2,3,...,2079314)
print(time.shape)  # (2079315,)
print(np.min(time), np.max(time))  # 94.29995464852608  0.0

fig, ax = plt.subplots()
ax.plot(time, audio)
ax.set(xlabel="Time(s)", ylabel="Sound Amplitude")
plt.show()
# 其实绘制的点一共有2079315个,但是由于我们的时间范围是0-94,因此音频信号看起来很拥挤


# 4、使用librosa画信号强度图
# 当然我们可以使用 librosa 库的工具来分析,可以修掉音频首尾的其他信息,画信号强度图的方式如下:
import librosa.display

audio, _ = librosa.effects.trim(audio)
librosa.display.waveplot(audio, sr=freq)
plt.show()
目录
相关文章
|
4天前
|
数据挖掘 PyTorch TensorFlow
|
6天前
|
机器学习/深度学习 数据采集 算法
时间序列结构变化分析:Python实现时间序列变化点检测
在时间序列分析和预测中,准确检测结构变化至关重要。新出现的分布模式往往会导致历史数据失去代表性,进而影响基于这些数据训练的模型的有效性。
25 1
|
2天前
|
数据可视化 Python
Python中的数据可视化:使用Matplotlib绘制图表
【9月更文挑战第11天】在这篇文章中,我们将探索如何使用Python的Matplotlib库来创建各种数据可视化。我们将从基本的折线图开始,然后逐步介绍如何添加更多的功能和样式,以使您的图表更具吸引力和信息量。无论您是数据科学家、分析师还是任何需要将数据转化为视觉形式的专业人士,这篇文章都将为您提供一个坚实的起点。让我们一起潜入数据的海洋,用视觉的力量揭示其背后的故事。
23 16
|
1天前
|
算法 Python
揭秘!Python数据魔术师如何玩转线性回归,让你的预测精准到不可思议
【9月更文挑战第13天】在数据科学领域,线性回归以其优雅而强大的特性,将复杂的数据关系转化为精准的预测模型。本文将揭秘Python数据魔术师如何利用这一统计方法,实现令人惊叹的预测精度。线性回归假设自变量与因变量间存在线性关系,通过拟合直线或超平面进行预测。Python的scikit-learn库提供了简便的LinearRegression类,使模型构建、训练和预测变得简单直接。
11 5
|
2天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的反诈视频宣传管理系统
基于Python+Vue开发的反诈视频宣传管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的反诈宣传管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
13 4
|
3天前
|
存储 算法 测试技术
预见未来?Python线性回归算法:数据中的秘密预言家
【9月更文挑战第11天】在数据的海洋中,线性回归算法犹如智慧的预言家,助我们揭示未知。本案例通过收集房屋面积、距市中心距离等数据,利用Python的pandas和scikit-learn库构建房价预测模型。经过训练与测试,模型展现出较好的预测能力,均方根误差(RMSE)低,帮助房地产投资者做出更明智决策。尽管现实关系复杂多变,线性回归仍提供了有效工具,引领我们在数据世界中自信前行。
17 5
|
3天前
|
机器学习/深度学习 数据挖掘 TensorFlow
🔍揭秘Python数据分析奥秘,TensorFlow助力解锁数据背后的亿万商机
【9月更文挑战第11天】在信息爆炸的时代,数据如沉睡的宝藏,等待发掘。Python以简洁的语法和丰富的库生态成为数据分析的首选,而TensorFlow则为深度学习赋能,助你洞察数据核心,解锁商机。通过Pandas库,我们可以轻松处理结构化数据,进行统计分析和可视化;TensorFlow则能构建复杂的神经网络模型,捕捉非线性关系,提升预测准确性。两者的结合,让你在商业竞争中脱颖而出,把握市场脉搏,释放数据的无限价值。以下是使用Pandas进行简单数据分析的示例:
17 5
|
3天前
|
存储 安全 算法
RSA在手,安全我有!Python加密解密技术,让你的数据密码坚不可摧
【9月更文挑战第11天】在数字化时代,信息安全至关重要。传统的加密方法已难以应对日益复杂的网络攻击。RSA加密算法凭借其强大的安全性和广泛的应用场景,成为保护敏感数据的首选。本文介绍RSA的基本原理及在Python中的实现方法,并探讨其优势与挑战。通过使用PyCryptodome库,我们展示了RSA加密解密的完整流程,帮助读者理解如何利用RSA为数据提供安全保障。
15 5
|
4天前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas处理CSV数据
使用Python和Pandas处理CSV数据
29 5
|
1天前
|
机器学习/深度学习 搜索推荐 算法框架/工具
使用Python实现深度学习模型:智能运动表现分析
使用Python实现深度学习模型:智能运动表现分析
12 1