You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Librosa将WAV音频文件分割为15秒区间?

音频分割为指定时长片段的解决方案

以下是修改后的完整代码,可直接实现将音频分割为15秒(或任意自定义时长)的片段:

import os
import numpy as np
import librosa
import soundfile as sf  # 补充缺失的库导入

audio_dir = r'data\acoustics\recordings'
out_dir = r'data\acoustics\splits'
os.makedirs(out_dir, exist_ok=True)

audio_file = os.path.join(audio_dir, 'rec_20220729T160547Z.wav')
wave, sr = librosa.load(audio_file, sr=None)  

# 自定义分割时长(单位:秒),改这个数就能切换成5秒、10秒等任意时长
segment_duration = 15
# 计算单片段对应的采样点数量:采样率sr = 每秒采样点数,所以时长*sr就是片段总采样点
segment_samples = segment_duration * sr
# 计算总片段数(向上取整,确保最后一段不足时长的片段也被保留)
num_sections = int(np.ceil(len(wave) / segment_samples))

split = []
for i in range(num_sections):
    start_idx = i * segment_samples
    end_idx = start_idx + segment_samples
    # 按采样点范围截取音频片段
    audio_segment = wave[start_idx:end_idx]
    split.append(audio_segment)

# 保存分割后的片段
recording_name = os.path.basename(audio_file[:-4])
for idx, segment in enumerate(split):
    out_file = f"{recording_name}_{idx}.wav"
    sf.write(os.path.join(out_dir, out_file), segment, sr)

关键改动说明

  • 新增自定义时长参数:segment_duration = 15是核心控制变量,直接修改数值就能调整分割片段的时长,无需改动其他逻辑。
  • 替换片段长度计算逻辑:原代码用sr(1秒的采样点数)作为片段长度,现在改成segment_duration * sr,即指定时长对应的总采样点数,这是实现任意时长分割的关键。
  • 修正语法错误:原代码中num_sections行缺少右括号,同时将分母从sr换成segment_samples,才能正确计算总片段数。
  • 补充依赖库:添加import soundfile as sf,否则sf.write会报错。
  • 优化循环逻辑:调整音频片段的截取范围,确保每次截取segment_samples个采样点,对应设置的时长。

额外提示

如果不需要保留最后一段不足指定时长的片段,只需将np.ceil换成np.floor,这样总片段数会向下取整,丢弃末尾的短片段。

内容的提问来源于stack exchange,提问作者andrewr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:57:21