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

将音频分割为5秒片段时遭遇IndexError问题求助

解决音频分割时的IndexError问题

错误根源

  1. 变量混淆:你把存储音频采样数据的y和存储文件路径的字符串filename搞混了:
    • 循环范围用len(filename)计算的是文件路径的字符数,不是音频的采样点总数,应该用len(y)。
    • 切片时错误截取filename的片段,得到的是字符串,而soundfile.write需要的是数值型音频数组,这直接导致了IndexError。
  2. 索引逻辑错误:原代码用5*sr*i作为起始索引,会快速超出音频数据的长度范围,正确的做法是用循环变量i直接作为起始点,每次步进5秒对应的采样数。

修正后的代码

import librosa
import soundfile as sf

filename= "/content/drive/MyDrive/Colab Notebooks/22__19_07_13_adventure_maniobra.wav"
y, sr = librosa.load(filename, sr=None)
segment_seconds = 5
segment_samples = segment_seconds * sr  # 5秒对应的采样点数量

# 遍历音频数据,按5秒分割
for idx, i in enumerate(range(0, len(y), segment_samples)):
    audio_segment = y[i:i+segment_samples]
    sf.write(f"dest_audio_{idx}.wav", audio_segment, sr)

关键修改说明

  • 用len(y)作为循环终止条件,确保覆盖完整的音频数据。
  • 直接通过y[i:i+segment_samples]截取当前5秒片段,最后一段如果不足5秒会自动取到音频末尾。
  • 用enumerate生成连续的文件名序号(0、1、2...),比原代码的序号更直观易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:07:38