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

使用librosa重采样音频至16kHz后输出异常问题求助

代码问题分析与修复方案

核心错误点

  • 未执行实际重采样操作:你调用librosa.load()时传入的sr是原音频采样率,加载得到的音频数组y还是32000Hz采样率的序列,后续直接调用soundfile.write()时指定samplerate=16000,相当于把原采样序列按更低的采样率强制解读,会出现声音变慢、时长翻倍、音调异常的问题,就是你所说的损坏。
  • 输出文件名固定导致覆盖:循环遍历所有音频文件时,输出路径的文件名固定为output_resampled_audio.wav,所有输入文件的结果会互相覆盖,最终仅保留最后一个文件的处理结果,还可能出现写入冲突导致文件损坏。
  • 变量未定义:代码中使用的zoom_loc变量没有提前赋值,会导致路径拼接失败,输出文件写入路径错误甚至无法写入。
  • 文件名拆分逻辑错误:用file.split(".")拆分文件名和后缀的方式不适用于名称含多个点的文件,应该用os.path.splitext()做后缀拆分。

修复后代码

import os
import librosa 
import soundfile as sf 

# 提前定义缺失的变量,根据你实际的路径修改
zoom_loc = "这里替换成你自己的zoom_loc实际路径"
folder_name = "trial_sess"
input_dir = os.path.join("process", folder_name)
# 提前创建输出目录避免写入报错
output_dir = os.path.join(zoom_loc, "sessions", folder_name)
os.makedirs(output_dir, exist_ok=True)

for file in os.listdir(input_dir):
    # 拆分后缀的正确方法
    nm, ext = os.path.splitext(file)
    ext = ext.lower()
    if ext in (".m4a", ".mp4", ".mp3"):
        file_path = os.path.join(input_dir, file)
        # 加载时直接指定目标采样率,librosa会自动完成重采样
        y, sr = librosa.load(file_path, sr=16000)
        # 输出文件名和原文件对应,避免覆盖
        output_path = os.path.join(output_dir, f"{nm}_resampled.wav")
        sf.write(output_path, data=y, samplerate=16000)

可选优化方案

如果不想在加载时重采样,也可以加载原采样率音频后调用librosa.resample显式重采样:

y, sr = librosa.load(file_path, sr=None) # 加载原采样率音频
y_16k = librosa.resample(y, orig_sr=sr, target_sr=16000)
sf.write(output_path, data=y_16k, samplerate=16000)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:06:05