WAV格式音频截取

【功能】
通常我们会拿到例如某个歌手的演唱会完整版的WAV格式的争端音频,而我们想对该音频进行分割或其中某些部分才是我们实际真正想要的音频段落,为此我们需要设计一个可以按照指定时分秒进行截取的程序。
要求实现的功能如下:
1.根据指定的起止时分秒的设置,截取出对应起止时段的WAV音频;
2.为每段截取出来的音频设置音频名称、专辑名称、歌手名称等信息
3.可以在某个参数表中进行批量设置

【需要的安装包/依赖】
1.WAV
2.pandas
3.sox:安装的位置需要与代码中设置的位置保持一致,本例中将sox.exe放置于sox_path=“D:\sox\sox-14-4-2\sox.exe”

【文件夹】
将不同文件放置不同文件夹中以进行区分
1.f_0=‘./原始音频/’
2.f_k=‘./截取参数/’
3.f_s=‘./运行结果/’
4.f_p=‘./音频缓存/’

【完整代码】

import wave
import os
import time
import pandas as pd

f_0='./原始音频/'   #原始音频存放文件夹
f_p='./音频缓存/'    #转化音频存放文件夹
f_k='./截取参数/'
f_s='./运行结果/'    #截断音频存放文件夹
sox_path="D:\sox\sox-14-4-2\sox.exe"
abs_path=os.path.dirname(os.path.abspath(__file__))
cmd='cd /d {}{} && for %i in (*.wav) do {} %i -b 16 -e signed-integer {}{}%i'.format(abs_path,f_0.replace('.',''),sox_path,abs_path,f_p.replace('.',''))  #shell脚本,解决wave初始非pcm格式问题
os.system(cmd)
t_0=time.time()
x_0=os.listdir(f_0)   #获取音频文件名称列表,已含后缀
t_p=[f_p+i for i in x_0]  #生成转化音频文件夹内文件的完整路径列表
df=pd.read_excel(f_k+os.listdir(f_k)[0],sheet_name='参数表',header=0,keep_default_na=False)
name_list=[list(df['Music_Name'])[i] +'-'+list(df['Artist'])[i]+'_'+list(df['Album'])[i] for i in range(len(df))]

#转化读取到的时分秒数据
def get_s_time(h,m,s):
    s_time=h*3600+m*60+s
    return s_time

#主函数
def cut_voice(stream,name,t_begin,t_end):
    wf = wave.open(stream, 'rb')
    nchannels, sampwidth, framerate, nframes = wf.getparams()[:4]
    strData = wf.readframes(nframes)  # 读取音频,字符串格式
    t_s = nframes / framerate
    cut_data = strData[int(t_begin * len(strData)/t_s):int(t_end * len(strData)/t_s)]
    wf.close()

    outfile = f_s + name+'.wav'  # 定义存储路径以及文件名
    outwave = wave.open(outfile, 'wb')
    comptype = "NONE"
    compname = "not compressed"
    outwave.setparams((nchannels, sampwidth, framerate, nframes==int(len(cut_data)),comptype, compname))
    outwave.writeframes(cut_data)
    outwave.close()

if __name__ == '__main__':
    for i in range(len(df)):
        t_begin=get_s_time(list(df['h_begin'])[i],list(df['m_begin'])[i],list(df['s_begin'])[i])
        t_end = get_s_time(list(df['h_end'])[i], list(df['m_end'])[i], list(df['s_end'])[i])
        cut_voice(t_p[0],name_list[i],t_begin,t_end)
    t_1 = time.time()
    print('\n全程耗时:%.2fs' % (t_1 - t_0))

【参数表说明】
参数配置表
h/m/s表示时分秒,只需要输入每个音频对应的起止时分秒(拆分输入),即可输出对应的音频片段

【注意事项】
1.sox.exe的安装位置必须与代码中sox-path相同,且为绝对路径;sox_path=“D:\sox\sox-14-4-2\sox.exe”
2.截取参数表设置完成后请保存关闭.
3.对应的文件夹需要事先建立
文件夹名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值