音频去噪关于剪辑的辅助工具

音频去噪关于剪辑的辅助工具 import numpy as npimport scipy.io.wavfile as wavfrom scipy import signaldef denoise_audio(input_file, output_file, methodspectral, noise_duration0.5, strength1.0)# 读取音频sample_rate, audio wav.read(input_file)if len(audio.shape) 1:audio audio[:, 0]audio audio.astype(np.float32)if np.max(np.abs(audio)) 0:audio audio / np.max(np.abs(audio))# 估计噪声noise_samples int(noise_duration * sample_rate)noise audio[:min(noise_samples, len(audio)//4)]# STFT参数n_fft 2048hop_length 512f, t, Zxx signal.stft(audio, fssample_rate, npersegn_fft, noverlapn_fft-hop_length)f_noise, t_noise, Zxx_noise signal.stft(noise, fssample_rate, npersegn_fft, noverlapn_fft-hop_length)noise_power np.mean(np.abs(Zxx_noise)**2, axis1, keepdimsTrue)if method spectral:# 谱减法magnitude np.abs(Zxx)phase np.angle(Zxx)magnitude_clean np.maximum(magnitude - strength * np.sqrt(noise_power), 0)Zxx_clean magnitude_clean * np.exp(1j * phase)else:# 维纳滤波signal_power np.abs(Zxx)**2wiener_gain signal_power / (signal_power strength * noise_power)Zxx_clean Zxx * wiener_gain_, audio_clean signal.istft(Zxx_clean, fssample_rate, npersegn_fft, noverlapn_fft-hop_length)audio_clean np.clip(audio_clean, -1, 1)# 保存denoised_int16 (audio_clean * 32767).astype(np.int16)wav.write(output_file, sample_rate, denoised_int16)print(f去噪完成保存至{output_file})# 使用示例if __name__ __main__:denoise_audio(input.wav, output.wav, methodwiener, strength0.8)