Whisper 음성 텍스트 변환 — Python으로 회의록 자동 생성하는 법

Whisper 음성 텍스트 변환 — Python으로 회의록 자동 생성하는 법

Whisper 음성 텍스트 변환 Python 스크립트 실행 화면

Whisper 음성 텍스트 변환은 OpenAI가 공개한 오픈소스 음성인식(STT) 모델을 활용하는 기술입니다. 회의 녹음, 강의, 팟캐스트 — 어떤 오디오 파일이든 텍스트로 바꿀 수 있고, 한국어를 포함한 98개 이상의 언어를 지원합니다. 무엇보다 무료이고 로컬에서 돌릴 수 있어서 민감한 음성 데이터도 외부 서버에 보내지 않고 처리할 수 있습니다.

이 글에서는 Whisper를 설치하고, CLI와 Python 스크립트로 음성을 텍스트로 변환하는 방법을 처음부터 끝까지 정리합니다.

Whisper란?

Whisper는 OpenAI가 68만 시간의 다국어 오디오 데이터로 학습한 음성인식 모델입니다. 특징은 다음과 같습니다:

항목 내용
개발사 OpenAI
라이선스 MIT (무료, 상업적 사용 가능)
지원 언어 98개+ (한국어 포함)
실행 환경 로컬 PC (GPU 권장, CPU도 가능)
지원 포맷 mp3, mp4, wav, flac, ogg, webm 등
출력 형식 txt, srt(자막), vtt, json, tsv

Whisper 음성 텍스트 변환 환경 설정

사전 준비

# Python 3.8~3.11 필요 (3.12 이상은 호환성 문제 가능)
python --version

# FFmpeg 설치 (오디오 처리에 필수)
# Ubuntu/Debian
sudo apt install ffmpeg

# macOS
brew install ffmpeg

# Windows — https://ffmpeg.org/download.html 에서 다운로드 후 PATH에 추가

Whisper 설치

# 기본 설치
pip install openai-whisper

# 또는 최신 버전 (GitHub에서 직접)
pip install git+https://github.com/openai/whisper.git

faster-whisper 설치 (더 빠른 대안)

원본 Whisper보다 최대 4배 빠르고 메모리를 절반만 사용하는 CTranslate2 기반 구현입니다. 실무에서는 이쪽을 더 많이 씁니다.

pip install faster-whisper

CLI로 바로 변환하기

설치가 끝나면 명령어 한 줄로 음성 파일을 텍스트로 변환할 수 있습니다:

# 기본 변환 (turbo 모델 사용)
whisper audio.mp3

# 한국어 지정 + medium 모델 (한국어는 medium 이상 권장)
whisper meeting.mp3 --language Korean --model medium

# 출력 형식 지정 (자막 파일 생성)
whisper lecture.mp3 --language Korean --model medium --output_format srt

# 텍스트만 출력
whisper interview.wav --language Korean --model medium --output_format txt

# 힌트 프롬프트 제공 (고유명사 인식률 향상)
whisper meeting.mp3 --language Korean --model medium \
  --initial_prompt "이 회의에서는 OpenStack, Kubernetes, Terraform에 대해 논의합니다."

실행하면 같은 디렉토리에 .txt, .srt, .json 등의 파일이 자동 생성됩니다.

모델 선택 가이드

모델 크기 필요 VRAM 한국어 품질 속도
tiny 39M ~1GB 낮음 매우 빠름
base 74M ~1GB 보통 빠름
small 244M ~2GB 양호 보통
medium 769M ~5GB 좋음 느림
large-v3 1550M ~10GB 매우 좋음 매우 느림
turbo 809M ~6GB 좋음 large 대비 빠름

한국어 추천: GPU가 있으면 medium 이상, CPU만 있으면 small. turbo는 속도와 정확도의 균형이 좋습니다.

Python 스크립트로 Whisper 음성 텍스트 변환하기

기본 스크립트

import whisper

# 모델 로드
model = whisper.load_model("medium")

# 오디오 파일 변환
result = model.transcribe("meeting.mp3", language="ko")

# 결과 출력
print(result["text"])

자막 파일(SRT) 생성 스크립트

import whisper

model = whisper.load_model("medium")
result = model.transcribe("lecture.mp3", language="ko")

# SRT 형식으로 저장
with open("lecture.srt", "w", encoding="utf-8") as f:
    for i, segment in enumerate(result["segments"], 1):
        start = segment["start"]
        end = segment["end"]

        # 시간 포맷 변환
        def format_time(seconds):
            h = int(seconds // 3600)
            m = int((seconds % 3600) // 60)
            s = int(seconds % 60)
            ms = int((seconds % 1) * 1000)
            return f"{h:02d}:{m:02d}:{s:02d},{ms:03d}"

        f.write(f"{i}\n")
        f.write(f"{format_time(start)} --> {format_time(end)}\n")
        f.write(f"{segment['text'].strip()}\n\n")

print("lecture.srt 생성 완료!")

faster-whisper 사용 (실무 권장)

from faster_whisper import WhisperModel

# GPU 사용: device="cuda", CPU 사용: device="cpu"
model = WhisperModel("medium", device="cpu", compute_type="int8")

segments, info = model.transcribe("meeting.mp3", language="ko")

print(f"감지된 언어: {info.language} (확률: {info.language_probability:.2f})")

for segment in segments:
    print(f"[{segment.start:.1f}s -> {segment.end:.1f}s] {segment.text}")

Whisper 음성 텍스트 변환 정확도 높이는 팁

1. –initial_prompt로 고유명사 힌트 제공

result = model.transcribe(
    "meeting.mp3",
    language="ko",
    initial_prompt="참석자: 김팀장, 박과장. 주제: Q1 매출 리뷰, KPI 달성률"
)

2. 오디오 전처리 — 녹음 품질이 나쁘면 FFmpeg로 노이즈를 줄여주면 인식률이 올라갑니다:

# 노이즈 제거 + 볼륨 정규화
ffmpeg -i noisy_audio.mp3 -af "highpass=f=200, lowpass=f=3000, volume=2" clean_audio.mp3

3. 긴 파일은 분할 처리 — 2시간 이상의 파일은 메모리 문제가 생길 수 있으므로, 30분 단위로 잘라서 처리하는 것이 안정적입니다.

실전 활용 사례

회의록 자동 생성, 유튜브 영상 자막 생성, 팟캐스트 텍스트 아카이빙, 강의 녹음 정리 등 다양한 곳에서 Whisper 음성 텍스트 변환이 활용됩니다. 특히 로컬에서 돌릴 수 있다는 점 때문에, 의료·법률·금융 등 민감 데이터를 다루는 환경에서도 안심하고 사용할 수 있습니다.

더 자세한 정보는 Whisper 공식 GitHub와 faster-whisper GitHub에서 확인할 수 있습니다.

댓글 남기기