python版本:3.9
全部代码为:
from pydub import AudioSegment
import os
from pydub.utils import make_chunks
from tqdm import trange
print("输入初始音频的存放文件夹:")
src = input()
print("输入剪去空白后a、b段音频的存放文件夹:")
ter_dir = input()
# 读取文件名称(列表形式)
des_data = os.listdir(src)
des_list = []
for j in des_data:
j = j.removesuffix('.wav')
des_list.append(j)
print("所有传感器点有:")
print(des_list)
# 输入需要删除的传感器点(列表形式)
print('请输入数字(按e结束)')
list = [] # 需要删除的传感器点所组成的列表
s = input()
while s != 'e':
list.append(s)
s = input()
print("您删除的传感器点是:")
print(list)
# 根据列表list删除des_list列表的元素
useful = []
for x in des_list:
if x not in list:
useful.append(x)
print("形成音频样本的传感器点是:")
print(useful)
# 把音频切割分为a、b两个部
for filename in useful:
wav = AudioSegment.from_wav(src+'/'+filename+'.wav') # 读取音频文件
wav[:14*60*1000].export(ter_dir+'/'+filename+'_a.wav', format="wav") # 读取14分钟以前的音频并保存
wav[16*60*1000:].export(ter_dir+'/'+filename+'_b.wav', format="wav") # 读取16分钟以后的音频并保存
# 切割成10s音频
size = 10000 # 切割的毫秒数 10s=10000
chunkdir = ter_dir # 需要切割的音频的文件夹
print("输入切割后的10s音频的存放文件夹:")
dir = input()
dirlist = os.listdir(chunkdir)
cnt = 0
for a in trange(len(dirlist)):
audio = AudioSegment.from_file(chunkdir + "//" + dirlist[a], "wav")
chunks = make_chunks(audio, size) # 将文件切割为10s一块
for a, chunk in enumerate(chunks):
chunk_name = dir + "/normal_id_00_{0}.wav".format(str(cnt).zfill(8))
cnt += 1
chunk.export(chunk_name, format="wav")
运行结果是:
此代码解决的问题背景:
有代号为99、101、766、767的四个传感器用来获取振动音频,其中99和101传感器获取的是异常音频,766和767传感器获取的是正常音频,并且四个传感器获取的音频中间有一段空白音频(在14分钟—16分钟)
我们首先通过排除异常音频保留正常音频:
print("输入初始音频的存放文件夹:")
src = input()
print("输入剪去空白后a、b段音频的存放文件夹:")
ter_dir = input()
# 读取文件名称(列表形式)
des_data = os.listdir(src)
des_list = []
for j in des_data:
j = j.removesuffix('.wav')
des_list.append(j)
print("所有传感器点有:")
print(des_list)
# 输入需要删除的传感器点(列表形式)
print('请输入数字(按e结束)')
list = [] # 需要删除的传感器点所组成的列表
s = input()
while s != 'e':
list.append(s)
s = input()
print("您删除的传感器点是:")
print(list)
# 根据列表list删除des_list列表的元素
useful = []
for x in des_list:
if x not in list:
useful.append(x)
print("形成音频样本的传感器点是:")
print(useful)
再将正常音频中的空白音频部分切除,把正常音频分为a和b两个部分:
# 把音频切割分为a、b两个部
for filename in useful:
wav = AudioSegment.from_wav(src+'/'+filename+'.wav') # 读取音频文件
wav[:14*60*1000].export(ter_dir+'/'+filename+'_a.wav', format="wav") # 读取14分钟以前的音频并保存
wav[16*60*1000:].export(ter_dir+'/'+filename+'_b.wav', format="wav") # 读取16分钟以后的音频并保存
最后将所有的a、b音频分为10s一段的音频并命名:
# 切割成10s音频
size = 10000 # 切割的毫秒数 10s=10000
chunkdir = ter_dir # 需要切割的音频的文件夹
print("输入切割后的10s音频的存放文件夹:")
dir = input()
dirlist = os.listdir(chunkdir)
cnt = 0
for a in trange(len(dirlist)):
audio = AudioSegment.from_file(chunkdir + "//" + dirlist[a], "wav")
chunks = make_chunks(audio, size) # 将文件切割为10s一块
for a, chunk in enumerate(chunks):
chunk_name = dir + "/normal_id_00_{0}.wav".format(str(cnt).zfill(8))
cnt += 1
chunk.export(chunk_name, format="wav")
希望能帮助到大家!