0%

Python-音频视频多媒体处理

Python 进行音频视频处理的相关实践。如:

  • pydub:通过简单、简洁的高层接口来操作音频文件。
  • dejavu:音频指纹提取和识别
  • librosa:强大的 Pythony 语音信号处理库。用于音频、音乐分析、处理和些常见的时频处理、特征提取、绘制声音图形等
  • pyaudioanalysis:音频分析、特征提取工具
  • scikit-video:SciPy 视频处理常用程序
  • SpeechRecognition:采用离线的 pocketSphinx,得到了一个智障的语音转文字工具。OUT
  • PyOpenGL:封装了 OpenGL 应用程序编程接口,能进行二维和三维图像处理。

概述

流式缓冲

  • 应用:视频打开即可观看,进度条随播放持续加载
  • 缓冲是指将数据预加载到内存保留区(或称为缓冲区)的过程。
    • 先下载一定的量,在看的时候,流媒体的下一部分在后台加载,对观看无影响

pydub

pydub:通过简单、简洁的高层接口来操作音频文件。

1
2
3
4
5
sudo pacman -S espeak

pip install pydub
# Successfully installed pydub-0.25.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# import speech
# while True:
# phrase =speech.input()
# speech.say("You said %s"%phrase)
# if phrase =="turn off":
# break
import pyttsx3 as pyttsx
engine = pyttsx.init()
voices = engine.getProperty('voices')
# for voice in voices:
# # engine.setProperty('voice', voice.id)
# engine.say('我是{}号,摩西摩西'.format(voice.id))
# engine.runAndWait()
# 语速控制
rate = engine.getProperty('rate')
engine.setProperty('rate', rate+100)
# 音量控制
volume = engine.getProperty('volume')
engine.setProperty('volume', volume+0.25)
# engine.say('hello world')
# engine.say('good morning')
# engine.say('你好吗,dsafds what the fuck ')
engine.say("""
日照香炉生紫烟,
遥看瀑布挂前川。
飞流直下三千尺,
疑是银河落九天。
""")
engine.runAndWait()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 录音
import pyaudio

def get_audio(output_file_path):
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, # 量化位数(音量级划分)
channels=1, # 声道数,单声道或双声道
rate=16000, # 采样率:一秒内对声音信号的采集次数,常用的有8kHz, 16kHz, 32kHz, 48kHz, 11.025kHz, 22.05kHz, 44.1kHz
input=True,
frames_per_buffer=1024) # 数据流块
# print("*"*10, "开始录音:请在5秒内输入语音")

frames = []
print('开启录音...')
RECORD_SECONDS = 5 # 录音秒数
for i in range(0, int(16000 / 1024 * RECORD_SECONDS)): #循环,采样率11025 / 256 * 5
data = stream.read(1024) #读取chunk个字节 保存到data中
frames.append(data) #向列表frames中添加数据data
stream.stop_stream()
stream.close() #关闭
p.terminate() #终结

wf = wave.open(output_file_path, 'wb') #打开wav文件创建一个音频对象wf,开始写WAV文件
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

dejavu

dejavu:音频指纹提取和识别

librosa

librosa:强大的 Pythony 语音信号处理库。用于音频、音乐分析、处理和些常见的时频处理、特征提取、绘制声音图形等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 音频读取
load()

# 重采样
resample()

# 短时傅里叶变换
stft()

# 幅度转换函数
amplitude_to_db()

# 频率转换函数
hz_to_mel()

pyAudioAnalysis

pyaudioanalysis:音频分析、特征提取工具

scikit-video

scikit-video:SciPy 视频处理常用程序

moviepy:一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs

SpeechRecognition

SpeechRecognition:采用离线的 pocketSphinx,得到了一个智障的语音转文字工具。OUT

PyOpenGL

PyOpenGL:封装了 OpenGL 应用程序编程接口,能进行二维和三维图像处理。

pyaudo

pyaudio:音频相关操作软件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
chunk = 256  # 定义数据流块
format = pyaudio.paInt16 # 量化位数(音量级划分)
channels = 1 # 声道数;声道数:可以是单声道或者是双声道
rate = 8000 # 采样率;采样率:一秒内对声音信号的采集次数,常用的有8kHz, 16kHz, 32kHz, 48kHz, 11.025kHz, 22.05kHz, 44.1kHz
record_seconds = 10 # 录音秒数
WAVE_OUTPUT_FILENAME = filepath # wav文件路径
p = pyaudio.PyAudio() # 实例化

stream = p.open(format=format, channels=channels, rate=rate, input=True, frames_per_buffer=chunk)
frames = [] # 定义一个列表
for i in range(0, int(rate / chunk * record_seconds)): # 循环,采样率11025 / 256 * 5
data = stream.read(chunk) # 读取chunk个字节 保存到data中
frames.append(data) # 向列表frames中添加数据data
print(frames)
print("*" * 10, "录音结束\n")

stream.stop_stream()
stream.close() # 关闭
p.terminate() # 终结
给博主来一杯卡布奇诺