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

提取FLAC音频转float32数组异常及梅尔频谱报错求助

问题解决思路与修复方案

核心问题1:音频数据解码错误

你用ffmpeg输出的是s32le格式(32位有符号小端整数),但直接用np.frombuffer(audio, np.float32)解析,导致二进制数据被错误解释,产生NaN和极端数值——这是引发后续librosa错误的根本原因。

修复代码:

cmd = (
    ffmpeg
    .input(video_path, ss=start, t=end-start)
    .output("pipe:", ac=1, ar=sampling_rate, format="s32le")
)

audio, _ = cmd.run(capture_stdout=True, quiet=True)

# 先按32位有符号整数解析,再归一化到[-1.0, 1.0]的float32范围
audio_int32 = np.frombuffer(audio, np.int32)
audio = audio_int32.astype(np.float32) / 2**31

核心问题2:librosa参数错误

调用melspectrogram时存在两个明显问题:

  1. window=25参数无效:window接受窗口函数(如'hann')或数组,不是整数。如果要设置窗口长度,需用n_fft参数(建议设为2的幂次,比如n_fft=256,符合音频处理常规)。
  2. FutureWarning提示需用关键字参数传递音频数据,避免后续版本报错。

修复后的librosa调用代码:

mel_spec = librosa.feature.melspectrogram(
    y=audio,
    sr=16000,
    hop_length=10,
    n_mels=128,
    n_fft=256,
    window='hann'
)

额外验证步骤

修复后可先检查音频数组是否正常:

print("音频数组是否含NaN:", np.isnan(audio).any())
print("音频数组极值范围:", audio.min(), audio.max())
# 正常情况下极值应在[-1.0, 1.0]之间,且无NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:48:24