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

使用PyWavelets音频去噪遇TypeError错误,请求问题排查

问题修复方案

错误根源

触发TypeError: arrays to stack must be passed as a "sequence" type such as list or tuple的核心原因是**pywt.threshold函数的关键字参数使用错误**:你传入了value=threshold_value,但该函数的阈值参数正确名称是threshold,错误的参数名导致函数内部参数解析逻辑混乱,进而抛出数组堆叠相关的错误。

另外,代码中还存在一个音频数据转换的潜在问题:audio_clip.to_soundarray返回的是范围[-1, 1]的浮点数组,直接强制转换为np.int16会导致数据截断(int16范围是[-32768, 32767]),生成的音频会失真甚至静音。

修正后的完整代码

import numpy as np
import soundfile
from moviepy.editor import VideoFileClip
import pywt

def extract_audio(input_video_path, output_audio_path):
    video_clip = VideoFileClip(input_video_path)
    audio_clip = video_clip.audio
    # 先将浮点音频数据缩放至int16范围,再转换类型
    audio_data = np.array(audio_clip.to_soundarray(fps=44100) * 32767, dtype=np.int16)

    if len(audio_data.shape) > 1 and audio_data.shape[1] > 1:
        # 立体声转单声道
        audio_data = np.mean(audio_data, axis=1, dtype=np.int16)
    
    soundfile.write(output_audio_path, audio_data, audio_clip.fps)

def denoise_audio(input_audio_path, output_audio_path, threshold=0.2):
    audio_data, rate = soundfile.read(input_audio_path)

    # 小波去噪:修正threshold参数名
    threshold_value = threshold * np.max(np.abs(audio_data))
    denoised_data = pywt.threshold(audio_data, threshold=threshold_value, mode='soft')
    
    soundfile.write(output_audio_path, denoised_data, rate)

# 示例调用
input_video_path = "Orson Welles Audio.mp4"
output_audio_path_extracted = "Extracted_Orson_Welles_Audio.wav"
output_audio_path_denoised = "Denoised_Orson_Welles_Audio.wav"

extract_audio(input_video_path, output_audio_path_extracted)
denoise_audio(output_audio_path_extracted, output_audio_path_denoised, threshold=0.2)

关键修改点

  • 修复小波去噪参数:将pywt.threshold中的value=threshold_value改为threshold=threshold_value,匹配函数的参数定义。
  • 修复音频数据缩放:提取音频时,先将to_soundarray返回的浮点数据乘以32767,再转换为np.int16,确保数据在int16的有效范围内,避免失真。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:03:26