본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 02. 03:48

Whisper 사용 전 오디오 정제: 노이즈 제거가 전사 정확도를 높이는 방법 (코드 포함)

요약

Whisper 모델의 전사 정확도를 높이기 위해 오디오 노이즈를 사전에 정제하는 방법과 Python 파이프라인을 소개합니다. 노이즈 유형별 실패 모드를 분석하고, StemSplit API를 활용하여 효율적으로 노이즈를 제거하는 과정을 다룹니다.

핵심 포인트

  • 노이즈 유형(Hum, Echo 등)에 따른 Whisper의 구체적 오류 패턴 분석
  • Python 기반의 오디오 노이즈 감지 및 진단 프로세스
  • StemSplit API를 활용한 클라우드 기반 노이즈 제거 구현
  • 전처리 파이프라인을 통한 WER(단어 오류율) 개선 방법

Whisper는 놀라울 정도로 강력합니다. 하지만 "강력하다"는 것이 "노이즈에 면역이 있다"는 뜻은 아닙니다. 만약 회의 녹음 파일을 Whisper에 돌렸는데 쓰레기 같은 결과가 나오거나, 더 최악인 경우 확신에 찬 오답(confidently wrong text)이 나왔다면, 문제는 모델이 아니라 대개 오디오에 있습니다.

중요한 점은 다음과 같습니다: 노이즈의 유형에 따라 실패하는 방식이 다르다는 것입니다. 전기적 험(Electrical hum)은 Whisper가 음절을 환각(hallucinate)하게 만듭니다. 에코(Echo)는 단어를 통째로 누락하게 만듭니다. 정전기(Static)는 음소(phonemes)를 혼동하게 만듭니다. 어떤 노이즈가 있는지 알면 정확히 어떤 해결책을 적용해야 할지 알 수 있습니다.

이 포스트에서는 다음 내용을 다룹니다:

  • ✅ 각 노이즈 유형(hum, hiss, echo, wind, static)이 Whisper 출력 품질을 저하시키는 방식
  • ✅ 전사(transcription) 전 노이즈를 감지하고 제거하는 Python 전처리 파이프라인 (preprocessing pipeline)
  • ✅ 클라우드 GPU 노이즈 제거를 위해 StemSplit Denoise API를 호출하는 방법 (로컬 설정 불필요)
  • ✅ 재현 가능한 측정된 WER(Word Error Rate) 개선 사항

노이즈 → 전사 실패 지도 (The Noise → Transcription Failure Map)

노이즈 유형소리 특징Whisper를 망가뜨리는 방식
험 (Hum, 50/60 Hz)지속적인 저주파 "웅" 소리유령 음절 삽입, 신뢰도 저하
...

이것들은 가설이 아닙니다. 재현 가능한 실패 모드(failure modes)입니다. 각각을 어떻게 처리하는지 보여드리겠습니다.

사전 요구 사항 (Prerequisites)

pip install openai-whisper requests python-dotenv soundfile numpy librosa

다음이 필요합니다:

  • stemsplit.io/developers에서 발급받은 StemSplit API 키 (무료 5분 티어, 신용카드 불필요)
  • ffmpeg 설치 (brew install ffmpeg / sudo apt install ffmpeg)

전처리 파이프라인 (The Preprocessing Pipeline)

상세 분석에 앞서 전체 파이프라인은 다음과 같습니다:

오디오 파일 (Audio file)
  → [노이즈 감지 (Noise detection)]
  → [StemSplit API를 통한 노이즈 제거 (Denoise via StemSplit API)]
...

1단계: 어떤 종류의 노이즈가 있는지 감지하기

모든 것을 노이즈 제거기(denoiser)에 던져넣기 전에, 무엇을 다루고 있는지 아는 것이 도움이 됩니다. 이 진단 함수는 노이즈 지문(noise fingerprint)을 제공합니다:

# diagnose.py
import numpy as np
import librosa
...

파일에 대해 실행하세요:

$ python diagnose.py zoom_call.mp3
Duration:      847.2s
Hum score:     0.712  ⚠ high
...

이 결과는 험(hum)과 에코(echo)가 모두 존재함을 알려줍니다. 이는 형광등 조명이 있고 음향 처리(acoustic treatment)가 되지 않은 홈 오피스에서 흔히 발생하는 현상입니다.

2단계: StemSplit API를 이용한 노이즈 제거 (Denoise)

StemSplit의 노이즈 제거 (denoise) 엔드포인트는 다섯 가지 모든 노이즈 유형을 한 번에 처리합니다. 이 엔드포인트는 GPU에서 DeepFilterNet을 실행하며, 이는 로컬 CPU 추론 (inference)보다 훨씬 빠르고 스펙트럼 차감 (spectral subtraction) 방식보다 더 깨끗한 결과를 생성합니다.

엔드포인트는 POST /api/v1/denoise-jobs입니다. 업로드 패턴은 사전 서명된 URL (presigned URL)을 사용합니다:

# denoiser.py
import os
import time
...

3단계: 정규화 (Normalize) 및 무음 제거 (Trim Silence)

노이즈 제거 후, 두 가지 빠른 후처리 (post-processing) 단계가 Whisper의 성능을 더욱 향상시킵니다:

  1. 정규화 (Normalize) — 오디오를 일정한 음량 수준 (-16 dBFS)으로 맞춥니다.
  2. 앞뒤 무음 제거 (Trim leading/trailing silence) — 오디오가 무음 상태로 시작하지 않을 때 Whisper의 문장 분할 (sentence segmentation) 기능이 더 잘 작동합니다.
# postprocess.py
import numpy as np
import soundfile as sf
...

4단계: Whisper를 이용한 전사 (Transcribe)

# transcribe.py
import whisper

...

전체 파이프라인 통합

# pipeline.py
import tempfile
import os
...

WER 개선: 기대 효과

저는 jiwer를 사용하여 단어 오류율 (WER, Word Error Rate)을 측정하며 노이즈가 있는 녹음 세트에 이 파이프라인을 실행했습니다:

from jiwer import wer

reference = "the quarterly earnings call starts at two pm eastern time"
...

다양한 녹음 파일에 대한 실제 적용 결과는 다음과 같습니다:

노이즈 유형처리 전 WER처리 후 WER개선 정도
전기적 험 (Electrical hum, 심함)34%8%약 75% 감소
...

이 수치들은 합성 벤치마크가 아닌 실제 녹음 데이터에서 얻은 것입니다. 결과는 노이즈의 심각도에 따라 달라질 수 있지만, 방향성은 일관됩니다: 노이즈가 있는 오디오 → 낮은 WER, 노이즈가 제거된 오디오 → 높은 WER.

도구 참조: 어떤 StemSplit 페이지를 사용해야 하는가

API 대신 웹 도구를 사용하는 경우, 각 노이즈 유형별로 특정 페이지가 마련되어 있습니다:

노이즈 유형 (Noise Type)직접 사용 가능한 도구 (Direct Tool)
범용 / 알 수 없는 노이즈 (All-purpose / unknown noise)Voice Cleaner
...

API 엔드포인트 (/api/v1/denoise-jobs)는 단 한 번의 호출로 이 모든 것을 처리합니다.

폴더 일괄 처리 (Batch Processing a Folder)

많은 파일을 처리하는 전사 파이프라인 (transcript pipelines)의 경우:

# batch_pipeline.py
from concurrent.futures import ThreadPoolExecutor, as_completed
from pathlib import Path
...

핵심 요약 (Key Takeaways)

  • 노이즈 유형에 따라 Whisper가 고장 나는 방식이 다릅니다 — 험 (hum) 노이즈는 음절을 삽입하고, 에코 (echo)는 단어를 누락시키며, 정전기 (static)는 단어 경계를 무너뜨립니다.
  • 전사(transcription) 후에가 아니라 전사 전에 노이즈를 제거하세요 — 전사된 텍스트를 사후 처리하는 것은 도움이 되지 않습니다. 입력되는 오디오 자체가 깨끗해야 합니다.
  • 진단 단계 (diagnostic step)를 실행할 가치가 있습니다 — 이미 깨끗한 오디오를 노이즈 제거하면 미세한 아티팩트 (artifacts)가 발생할 수 있으므로 이를 방지해 줍니다.
  • 노이즈 제거 후 정규화 (Normalize)를 수행하세요 — 노이즈 제거는 종종 RMS 레벨을 변화시킵니다. Whisper에 넣기 전에 정규화를 하면 일관된 입력을 제공할 수 있습니다.
  • 심하게 노이즈가 섞인 녹음물의 경우 60~75%의 WER (Word Error Rate) 개선은 현실적인 수치입니다 — 녹음 상태가 깨끗해질수록 그 격차는 줄어듭니다.

전체 코드는 복사하여 바로 사용할 수 있습니다. 진행 중 문제가 발생하거나 다른 전사 백엔드 (transcription backend)로 교체하고 싶다면 아래에 댓글을 남겨주세요.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0