Реализация AI-шумоподавления в аудио
AI-шумоподавление убирает фоновые шумы (HVAC, трафик, клавиатура, гул) из речевых записей. В отличие от спектрального вычитания, нейросетевые модели не создают «музыкального шума» и сохраняют естественность голоса.
Инструменты и подходы
noisereduce — библиотека на основе спектрального вычитания с адаптивным профилем шума:
import noisereduce as nr
import soundfile as sf
import numpy as np
def denoise_audio(input_path: str, output_path: str) -> None:
audio, sr = sf.read(input_path)
# Статистика шума из первых 0.5 секунд (тишина/фон)
noise_sample = audio[:int(sr * 0.5)]
reduced = nr.reduce_noise(
y=audio,
sr=sr,
y_noise=noise_sample,
prop_decrease=0.75, # степень подавления: 0=нет, 1=максимум
stationary=False # False = адаптивный шум
)
sf.write(output_path, reduced, sr)
RNNoise — легковесная рекуррентная сеть от Mozilla, работает в реальном времени:
import subprocess
def rnnoise_denoise(input_wav: str, output_wav: str) -> None:
# Требует 48 kHz моно
subprocess.run([
"ffmpeg", "-i", input_wav,
"-af", "arnndn=m=/usr/share/rnnoise/rnnoise-models/beguiling-drafter-2018-08-30/bd.rnnn",
output_wav
], check=True)
DeepFilterNet — SOTA модель для улучшения речи, DNSMos > 3.8/5:
from df import enhance, init_df
model, df_state, _ = init_df()
def deepfilter_enhance(audio_array: np.ndarray, sr: int) -> np.ndarray:
enhanced = enhance(model, df_state, audio_array)
return enhanced
Применение в пайплайне
| Сценарий | Рекомендация | Задержка |
|---|---|---|
| Post-processing записей | DeepFilterNet | не критична |
| Realtime VoIP | RNNoise | < 10 мс |
| Подготовка данных для STT | noisereduce | офлайн |
| Студийный ремастер | Demucs + DeepFilterNet | офлайн |
Шумоподавление перед Whisper снижает WER на 15–40% для записей с SNR < 10 dB. Сроки интеграции в существующий аудиопайплайн — 3–5 дней.







