由于有网友在我这篇Python-将一整段音频批量切成一小段一小段的博客下,问我如何实现按步长切割,切割的段之间有重叠部分,所以写了这个脚本
1.代码如下:
from pydub import AudioSegment
import numpy as np
audio = AudioSegment.from_file("电视剧.wav", "wav")
audio_time = len(audio)#获取待切割音频的时长,单位是毫秒
cut_parameters = np.arange(10,audio_time/1000,10) #np.arange()函数第一个参数为起点,第二个参数为终点,第三个参数为步长(10秒)
start_time = int(0)#开始时间设为0
########################根据数组切割音频####################
for t in cut_parameters:
stop_time = int(t * 1000) # pydub以毫秒为单位工作
audio_chunk = audio[start_time:stop_time] #音频切割按开始时间到结束时间切割
audio_chunk.export("dianshiju-{}.wav".format(int(t/10)), format="wav") # 保存音频文件,t/10只是为了计数,根据步长改变。步长为5就写t/5
start_time = stop_time - 4000 #开始时间变为结束时间前4s---------也就是叠加上一段音频末尾的4s
print('finish')
2.效果图:
第二段有第一段结尾4s的音频
希望可以解决你的问题,如果还有问题欢迎留言~我尽量解答
2021/6/16更新
有些同学有很多文件需要这样子处理,但不会批处理,在这里贴上批处理的代码:
import os
from pydub import AudioSegment
import numpy as np
########################开始批处理######################
file_path1 = r"E:\untitled1\audio_test\input" #输入路径
file_path2 = r"E:\untitled1\audio_test\output" #输出路径
for file in os.listdir(file_path1): #遍历文件
path1 = file_path1+'\\'+file
filename = file.split('.')[0] #不带 .wav的文件名
########################处理音频文件#######################
audio = AudioSegment.from_file(path1, "wav")
audio_time = len(audio) # 获取待切割音频的时长,单位是毫秒
cut_parameters = np.arange(1, audio_time / 1000, 10) # np.arange()函数第一个参数为起点,第二个参数为终点,第三个参数为步长(10秒)
start_time = int(0) # 开始时间设为0
########################根据数组切割音频####################
for t in cut_parameters:
stop_time = int(t * 1000) # pydub以毫秒为单位工作
# print(stop_time)
audio_chunk = audio[start_time:stop_time] # 音频切割按开始时间到结束时间切割
print("split at [{}:{}] ms".format(start_time, stop_time))
audio_chunk.export(file_path2 + '\\' + filename + "-{}.wav".format(int(t / 1)), format="wav") #保存音频文件
start_time = stop_time - 4000 # 开始时间变为结束时间前4s---------也就是叠加上一段音频末尾的4s
print('finish')
多说一点,学pyhon我觉得要学习怎么去批处理,把批处理代码搞清楚!!!因为很多时候你在网上看到一些功能示例都是对一个文件进行处理的。只要学会了批处理,那你会发现工作轻松很多~
加油!!!