Python——读取文件夹中的文件名+根据列表A删除列表B中的元素+切割中间部分音频+切分音频(10s一段)+对10s音频批量命名

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")

希望能帮助到大家!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值