![[파이썬 18] 회의 녹음, 파이썬으로 자동 받아쓰기](https://img.thenullpage.com/posts/5397/5397_1_1429fb.webp)
회의나 인터뷰 녹음을 손으로 받아쓰는 건 시간이 많이 드는 작업이다. OpenAI가 공개한 Whisper는 음성을 텍스트로 변환해주는 오픈소스 음성인식 모델로, 68만 시간 분량의 다국어 음성 데이터로 학습되어 억양이나 배경소음, 전문용어에도 상당히 강건한 성능을 보인다는 평가를 받는다.
1. 로컬 실행 vs API 방식, 두 가지 선택지
Whisper를 쓰는 방법은 크게 두 가지다. 하나는 오픈소스 라이브러리를 내 컴퓨터에 직접 설치해서 로컬에서 돌리는 방식이고, 다른 하나는 OpenAI의 API를 호출해서 클라우드에서 처리하는 방식이다.
로컬 방식은 API 키나 비용 없이 무료로 쓸 수 있고 데이터를 외부로 보내지 않아도 된다는 장점이 있지만, 컴퓨터 성능에 따라 처리 속도가 느릴 수 있다. API 방식은 별도 설치 없이 빠르게 처리되지만 API 호출 비용이 든다.
2. 로컬 설치와 첫 실행
pip install openai-whisper
Whisper는 오디오 디코딩을 위해 ffmpeg이라는 별도 프로그램이 함께 설치되어 있어야 동작한다.
# 윈도우는 별도 설치, 맥은 아래 명령어로
brew install ffmpeg
python
import whisper
model = whisper.load_model("base") # tiny, base, small, medium, large 중 선택
result = model.transcribe("회의녹음.mp3")
print(result["text"])
모델 크기는 tiny부터 large까지 총 6단계로 나뉘며, 크기가 클수록 정확도는 높아지지만 처리 속도는 느려지고 필요한 메모리도 늘어난다는 트레이드오프가 있다. 일반적인 용도로는 base나 medium 정도로도 충분히 쓸만한 결과를 얻을 수 있다는 평가가 많다.
3. 언어 지정하고 시간대별 타임스탬프 받기
result = model.transcribe("강의녹음.mp3", language="Korean")
for segment in result["segments"]:
print(f"[{segment['start']:.2f}초, {segment['end']:.2f}초] {segment['text']}")
segments는 문장 단위로 텍스트와 함께 시작/끝 시간을 담고 있어서, 자막을 만들거나 녹음 중 특정 발언 시점을 정확히 찾아야 할 때 유용하게 쓰인다.
4. 폴더 안 여러 파일 일괄 처리
이전 편들에서 다룬 패턴처럼, 폴더 안의 여러 음성 파일을 한 번에 텍스트로 변환하는 것도 반복문으로 처리할 수 있다.
from pathlib import Path
import whisper
model = whisper.load_model("base")
audio_dir = Path("./녹음파일")
for audio_file in audio_dir.glob("*.mp3"):
print(f"{audio_file.name} 처리중...")
result = model.transcribe(str(audio_file))
output_path = audio_dir / f"{audio_file.stem}.txt"
output_path.write_text(result["text"])
print(f"저장완료: {output_path}")
모델은 매번 새로 불러오면 시간이 오래 걸리기 때문에, 반복문 바깥에서 한 번만 로드해두고 그 모델을 계속 재사용하는 게 성능상 중요한 포인트로 언급된다.
5. API 방식, 빠르고 간편하게
로컬 설치가 번거롭거나 빠른 처리가 필요하면 API 방식도 대안이 될 수 있다. 다만 API 방식은 파일 크기(25MB)와 지원 형식(mp3, mp4, wav 등)에 제한이 있어서, 큰 파일은 미리 잘라서 나눠 보내야 하는 경우도 있다.
6. 정리
Whisper는 로컬에서 무료로 돌릴 수도, API로 빠르게 처리할 수도 있는 음성인식 도구다. 모델 크기는 속도와 정확도의 트레이드오프이고, 타임스탬프 기능을 쓰면 자막 제작이나 특정 구간 검색에도 활용할 수 있다. 앞서 배운 폴더 일괄 처리 패턴을 그대로 적용하면 회의록 대량 변환 같은 작업도 자동화할 수 있다.