Whisper
OpenAI Whisper
OpenAI의 음성 인식 모델. 다국어 지원, 오픈소스. 번역과 자막 생성에 널리 사용.
OpenAI Whisper
OpenAI의 음성 인식 모델. 다국어 지원, 오픈소스. 번역과 자막 생성에 널리 사용.
Whisper는 OpenAI가 2022년 9월 공개한 자동 음성 인식(ASR, Automatic Speech Recognition) 모델입니다. 인터넷에서 수집한 68만 시간의 다국어 음성 데이터로 학습되어 영어를 포함한 99개 언어를 인식하고, 한국어를 포함한 여러 언어를 영어로 번역할 수 있습니다. MIT 라이선스로 오픈소스 공개되어 누구나 무료로 사용할 수 있습니다.
Whisper 이전의 음성 인식은 각 언어별로 별도 모델이 필요했고, 억양, 배경 소음, 전문 용어에 취약했습니다. Whisper는 대규모 약지도 학습(Weakly Supervised Learning)으로 다양한 음향 환경에서도 강건하게 동작합니다. 팟캐스트, 유튜브 자막, 회의록 생성, 통역 보조 등에 널리 사용됩니다.
기술적으로 Whisper는 인코더-디코더 Transformer 구조입니다. 오디오를 30초 단위 청크로 나누고, 80채널 멜 스펙트로그램으로 변환한 후 인코더에 입력합니다. 디코더는 이전에 생성한 텍스트와 함께 다음 토큰을 예측하며, 언어 감지, 타임스탬프 생성, 번역 등 다양한 태스크를 지원합니다.
실무에서 Whisper는 로컬 실행(GPU/CPU)과 OpenAI API 두 가지 방식으로 사용합니다. 로컬은 무료지만 GPU가 필요하고, API는 간편하지만 분당 과금됩니다. Faster-Whisper(CTranslate2 기반)는 원본 대비 4배 빠르고 메모리를 절반만 사용하여 실무에서 자주 선택됩니다.
# pip install openai-whisper (원본)
# pip install faster-whisper (최적화 버전, 권장)
# === 방법 1: 원본 Whisper (로컬) ===
import whisper
model = whisper.load_model("base") # tiny, base, small, medium, large-v3
# 음성 파일 전사
result = model.transcribe("audio.mp3", language="ko")
print(result["text"])
# 영어로 번역
result_en = model.transcribe("audio.mp3", task="translate")
print(result_en["text"])
# 타임스탬프 포함
for segment in result["segments"]:
print(f"[{segment['start']:.2f}s - {segment['end']:.2f}s] {segment['text']}")
# === 방법 2: Faster-Whisper (4배 빠름, 권장) ===
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
segments, info = model.transcribe("audio.mp3", language="ko")
print(f"감지 언어: {info.language} (확률: {info.language_probability:.2f})")
for segment in segments:
print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")
# === 방법 3: OpenAI API ===
from openai import OpenAI
client = OpenAI(api_key="your-api-key")
# 전사 (Transcription)
audio_file = open("audio.mp3", "rb")
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="verbose_json",
timestamp_granularities=["segment"]
)
print(transcript.text)
for segment in transcript.segments:
print(f"[{segment.start}s] {segment.text}")
# 번역 (Translation to English)
translation = client.audio.translations.create(
model="whisper-1",
file=audio_file
)
print(translation.text)
# === 방법 4: 스트리밍/실시간 전사 (RealtimeSTT) ===
# pip install RealtimeSTT
# from RealtimeSTT import AudioToTextRecorder
#
# recorder = AudioToTextRecorder(model="base")
#
# def process_text(text):
# print(f"인식된 텍스트: {text}")
#
# recorder.text_callback = process_text
# recorder.start()
2025년 1월 기준 OpenAI Whisper API 가격
| 모델 | 가격 | 시간당 비용 | 특징 |
|---|---|---|---|
| Whisper / GPT-4o Transcribe | $0.006/분 | $0.36/시간 | 표준 전사 |
| GPT-4o Transcribe + Diarization | $0.006/분 | $0.36/시간 | 화자 분리 포함 |
| GPT-4o Mini Transcribe | $0.003/분 | $0.18/시간 | 저비용 옵션 |
Whisper 모델 크기별 비교
| 모델 | 파라미터 | VRAM 필요량 | 상대 속도 |
|---|---|---|---|
| tiny | 39M | ~1GB | 32x |
| base | 74M | ~1GB | 16x |
| small | 244M | ~2GB | 6x |
| medium | 769M | ~5GB | 2x |
| large-v3 | 1.55B | ~10GB | 1x |
비용 비교
"유튜브 자막 자동 생성에 Whisper를 쓰면 좋을 것 같아요. Faster-Whisper로 로컬에서 돌리면 API 비용 없이 large-v3 모델을 쓸 수 있고, 한국어 인식 정확도가 꽤 높습니다. GPU가 있으면 실시간 전사도 가능해요."
"Whisper의 장점이 뭔가요?" - "오픈소스라 무료로 로컬 실행 가능하고, 99개 언어를 하나의 모델로 지원해요. 특히 배경 소음이나 억양에 강건해서 실제 환경에서도 잘 동작합니다. 대신 실시간 스트리밍은 기본 지원이 안 돼서 별도 처리가 필요해요."
"회의록 서비스에 Whisper + Diarization 조합을 쓰면 화자별로 분리된 자막을 만들 수 있어요. OpenAI API의 GPT-4o Transcribe with Diarization은 추가 비용 없이 화자 분리를 해줍니다."
30초 이내의 짧은 오디오나 혼합 언어에서는 언어 감지가 틀릴 수 있습니다. 한국어 음성이면 language="ko"를 명시적으로 지정하세요. 잘못된 언어 감지는 전사 품질을 크게 떨어뜨립니다.
Whisper는 내부적으로 오디오를 30초 청크로 처리하지만, 전체 파일을 메모리에 로드합니다. 수 시간 분량의 오디오는 청크 단위로 나눠 처리하거나 Faster-Whisper의 batched inference를 사용하세요.
프로덕션에서는 Faster-Whisper를 권장합니다. CTranslate2로 최적화되어 동일 정확도에서 4배 빠르고 메모리를 절반만 사용합니다. INT8 양자화를 쓰면 더 가벼워집니다.