로컬 환경에서 Whisper를 활용한 음성 텍스트 변환 및 요약 방법
개요
Whisper는 OpenAI가 공개한 범용 음성 인식(ASR, Automatic Speech Recognition) 모델로, 다국어 음성 인식과 번역, 언어 감지를 하나의 모델로 수행할 수 있는 것이 특징이다1. 공개된 파이썬 패키지와 명령줄 도구를 활용하면, 인터넷 없이도 로컬 환경에서 음성을 텍스트로 변환하고 다양한 자동화 워크플로우에 쉽게 통합할 수 있다1.

이 글에서는 Whisper를 로컬에 설치하는 방법, 모델 선택 기준, 명령줄과 파이썬에서 음성을 텍스트로 변환하는 실전 예제를 설명한다. 이어서 변환된 텍스트를 요약하기 위한 기본 전략과, Whisper 기반 로컬 음성-텍스트-요약 파이프라인을 설계하는 방법을 정리한다. 마지막으로 GPU 가속과 faster-whisper 계열 구현을 활용해 실시간에 가까운 속도로 받아쓰기/회의 기록 등을 처리하는 요령도 함께 살펴본다132.
Whisper란 무엇인가
Whisper는 대규모 웹 오디오(약 68만 시간)를 기반으로 학습된 트랜스포머(Transformer) 인코더-디코더 구조의 음성 인식 모델이다12. 단순한 음성-텍스트 변환뿐 아니라, 다국어 음성 인식, 음성을 영어로 번역, 음성 언어 자동 식별, 음성 구간 검출 등의 작업을 하나의 토큰 시퀀스로 통합해 처리하는 멀티태스킹 모델이라는 점이 특징이다1.
모델은 tiny부터 large, turbo까지 다양한 크기로 제공되며, 일부 모델은 영어 전용(tiny.en, base.en 등), 나머지는 다국어 모델로 제공된다1. 모델 크기가 클수록 정확도는 높아지지만, 필요한 GPU 메모리와 추론 시간도 증가하므로, 용도(실시간 받아쓰기/회의 녹취/장시간 파일 처리)에 따라 적절한 균형을 선택하는 것이 중요하다12.
이미지 출처: GitHub - openai/whisper
Whisper 모델과 크기 선택 기준
Whisper는 대략 다음과 같은 크기와 특성을 가진 모델들을 제공한다12.
tiny,base,small,medium,large,turbo각 모델은 수천만~수십억 개의 파라미터를 가지며, VRAM 요구량과 속도가 크게 다르다12.
GitHub 문서 기준으로, tiny와 base 계열은 약 1GB 수준의 VRAM에서도 동작하며, small은 약 2GB, medium은 약 5GB, large는 약 10GB 정도의 GPU 메모리를 요구한다1. turbo 모델은 약 6GB VRAM이 필요하지만, large-v3 대비 6배 안팎의 추론 속도를 제공하면서도 정확도 감소는 최소화하도록 최적화된 버전으로 소개된다12.
실제 사용 환경에서는 다음과 같이 선택하는 것이 일반적이다132.
실시간 받아쓰기, 짧은 프롬프트용:
tiny.en,base.en또는turbo(속도 우선, 약간의 오탈자 허용)길고 중요한 회의/강의 녹취:
small,medium(속도와 정확도의 균형)다국어, 높은 정확도 중시:
large또는large-v3(충분한 GPU 메모리 필요)CPU-only 또는 저사양:
tiny또는base(속도는 느리지만 설치 용이)
Linux에서 faster-whisper를 사용해 tiny.en, base.en, small.en 등을 구동한 사례에 따르면, CPU에서도 수 초 내에 짧은 문장을 처리할 수 있어 실제 받아쓰기 용도로 활용되고 있다3. 반면 large 수준은 정확도는 높지만 딜레이가 커져, 실시간 상호작용보다는 오프라인 배치 처리에 더 적합하다3.
로컬 설치를 위한 기본 준비
Whisper를 로컬에서 사용하려면 다음 요소들이 필요하다1.
Python 환경
공식 구현은 Python 3.8~3.11과 최신 PyTorch 버전에서 동작하도록 개발되었다1.
가상환경(venv, conda 등)을 사용하는 것이 패키지 충돌을 줄이는 데 도움이 된다.
PyTorch 설치
GPU를 활용하려면 CUDA 지원 버전의 PyTorch를 설치해야 한다.
CPU만 사용할 경우에는 일반 CPU용 PyTorch로 충분하다.
ffmpeg 설치
Whisper는 내부적으로
ffmpeg를 사용해 다양한 형식의 오디오/비디오 파일을 읽어들인다1.Ubuntu/Debian 계열:
sudo apt install ffmpegArch:sudo pacman -S ffmpegmacOS(Homebrew):brew install ffmpegWindows(Chocolatey):choco install ffmpeg등 패키지 매니저로 설치 가능하다1.
Rust 및 관련 툴(선택적)
토크나이저 라이브러리
tiktoken이 사용하는 플랫폼에서 미리 빌드된 wheel이 없을 경우, 러스트 개발 환경이 필요할 수 있다1.설치 오류에
setuptools_rust관련 메시지가 보이면,pip install setuptools-rust로 해결할 수 있다1.
Whisper 패키지 설치
Whisper의 참조 구현은 PyPI와 GitHub에서 제공된다1.
안정된 최신 버전 설치:
pip install -U openai-whisperGitHub 최신 커밋에서 직접 설치:
pip install git+https://github.com/openai/whisper.git이미 설치된 것을 GitHub 최신 버전으로 강제 재설치:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
설치 과정에서 오류가 발생하면, ffmpeg 설치 여부, Python 버전, Rust 환경 유무를 순서대로 점검하는 것이 좋다1. 특히 Windows 환경에서는 ffmpeg 경로가 PATH에 제대로 잡혀 있는지 확인해야 한다.
명령줄(커맨드라인)로 음성을 텍스트로 변환하기
Whisper 패키지를 설치하면 whisper라는 명령줄 도구가 함께 제공된다1. 이를 이용하면 파이썬 코드를 직접 작성하지 않고도 간단히 음성을 텍스트로 변환할 수 있다.
기본 사용법
가장 단순한 형태는 다음과 같다1.
whisper audio.wav --model turbo여러 개의 오디오 파일을 한 번에 처리할 수도 있다1.
whisper audio1.flac audio2.mp3 audio3.wav --model turbo명령 실행 후 현재 디렉터리에 다음과 같은 파일들이 생성된다.
audio.txt: 전체 텍스트audio.vtt,audio.srt: 자막 형식(타임스탬프 포함)audio.json: 세부 메타데이터와 세그먼트 정보
언어 지정과 번역
비영어 음성을 그대로 해당 언어 텍스트로 변환하거나, 영어로 번역하는 것도 가능하다1.
특정 언어로 인식(예: 일본어 음성 → 일본어 텍스트):
whisper japanese.wav --language Japanese --model medium특정 언어 음성을 영어로 번역(예: 일본어 → 영어):
whisper japanese.wav --language Japanese --model medium --task translate
다만 turbo 모델은 번역 작업에 특화되어 있지 않으며, --task translate를 주더라도 원문 언어로만 결과를 내보낸다는 점에 주의해야 한다1. 번역이 중요할 경우 medium 또는 large 다국어 모델을 사용하는 편이 안정적이다12.
도움말 확인
사용 가능한 전체 옵션은 다음과 같이 확인할 수 있다.
whisper --help여기에서 출력 형식, 디코딩 옵션, 배치 크기, 디바이스 선택(CPU/GPU) 등 다양한 파라미터를 조정할 수 있다1.
파이썬에서 Whisper를 활용한 음성 인식
보다 유연한 처리를 위해서는 파이썬 코드에서 Whisper를 직접 사용하는 것이 좋다. GitHub 문서에는 기본적인 사용 예제가 제공된다1.
가장 단순한 파이썬 예제
import whisper
model = whisper.load_model("turbo") # 또는 "base", "small", "medium", "large"
result = model.transcribe("audio.mp3")
print(result["text"])transcribe()는 내부적으로 전체 파일을 30초 단위 슬라이딩 윈도우로 잘라 처리하고, 자동 회귀 방식으로 각 구간의 텍스트를 생성한다1. 반환되는 result에는 전체 텍스트, 세그먼트별 텍스트, 타임스탬프, 언어 정보 등이 포함된다.
언어 감지와 저수준 디코딩 예제
언어 감지와 디코딩 과정을 직접 제어하고 싶다면 다음과 같은 흐름을 사용할 수 있다1.
whisper.load_audio()로 오디오 로드whisper.pad_or_trim()으로 30초 길이에 맞게 패딩/트리밍whisper.log_mel_spectrogram()으로 로그 멜-스펙트로그램 생성model.detect_language()로 언어 추정whisper.DecodingOptions,whisper.decode()로 디코딩 수행
이 방식을 사용하면, beam search, temperature, 반복 억제 등 디코딩 옵션을 세밀하게 조정할 수 있다1. 긴 오디오를 일정 길이로 잘라서 스트리밍 형태로 처리하는 사용자 정의 로직을 작성할 때 유용하다.
GPU 가속 및 faster-whisper 계열 구현
공식 Whisper 구현도 GPU를 지원하지만, 추론 속도를 극대화하기 위해 CTranslate2 기반 faster-whisper 같은 구현을 사용하는 사례가 많다3. faster-whisper는 동일한 Whisper 체크포인트를 사용하면서, 더 최적화된 런타임을 제공해 CPU와 GPU 모두에서 더 빠른 추론 속도를 보여준다3.
Linux 환경에서 SuperWhisper와 유사한 받아쓰기 툴을 직접 구현한 사례(SoupaWhisper)에 따르면, 다음과 같은 구조로 로컬 음성 인식 시스템을 구성할 수 있다3.
핫키 감지:
pynput등으로 F12 같은 글로벌 단축키를 감지한다.오디오 녹음:
arecord(ALSA)를 이용해 16kHz mono WAV로 녹음한다.Whisper 추론:
faster-whisper로 로컬에서 모델을 로드하고 텍스트를 얻는다.출력 처리:
xclip으로 클립보드에 복사하고,xdotool로 현재 포커스된 창에 텍스트를 자동 입력한다.
이 방식으로 구현된 툴에서 base.en 모델을 CPU로 사용할 경우, 짧은 문장은 수 초 이내에 변환되어 실시간 받아쓰기용으로 충분한 속도를 보였다고 보고된다3. GPU가 있다면 small.en 이상의 모델도 실사용 가능 속도를 확보할 수 있다.
또한, 큰 모델은 로드 시간이 길기 때문에, 애플리케이션 시작 시 별도 스레드에서 백그라운드로 모델을 로드하고, 실제 추론 시점에는 로딩 완료 이벤트를 기다리는 방식으로 UX를 개선할 수 있다는 점도 소개된다3.
음성 → 텍스트 → 요약 파이프라인 설계 개요
Whisper 자체는 "요약" 기능을 제공하지 않고, 주로 음성 → 텍스트 변환을 담당한다12. 따라서 요약 기능까지 포함한 워크플로우를 구축하려면 다음과 같은 파이프라인을 설계하는 것이 일반적이다.
음성 수집
마이크 실시간 입력 or 미리 녹음된 파일(mp3, wav, m4a, mp4 등).
긴 회의/강의는 여러 파일로 나누어 저장하는 것이 관리에 유리하다.
Whisper로 텍스트 변환
CLI 또는 파이썬 API로 음성을 텍스트로 변환.
필요하면 타임스탬프가 포함된 SRT/VTT도 함께 생성해 나중에 구간별 요약에 활용.
텍스트 전처리
불필요한 침묵/잡담 제거, 중복 발언 통합.
문장 분리, 화자 정보(있다면) 정리.
요약 단계
간단한 규칙 기반 요약(키워드 추출, 중요한 문장 선택) 또는
대형 언어 모델(LLM)을 통한 추상 요약(요지 정리, 액션 아이템 추출 등) 호출.
결과 저장/활용
전체 텍스트 + 요약본을 노트/위키/프로젝트 관리 도구에 저장.
검색 용이성을 위해 태그/키워드 메타데이터 추가.
Whisper는 주로 2단계(음성 → 텍스트)를 담당하며, 나머지는 사용 환경에 맞게 별도로 구현하거나, 다른 라이브러리/서비스와 연동하게 된다12.
긴 음성의 텍스트 요약을 위한 실전 전략
Whisper로 긴 회의나 강의를 텍스트로 변환한 뒤 요약하기 위해서는, 텍스트 길이와 구조를 고려한 전략이 필요하다. 여기서는 어떤 특정 요약 모델을 전제로 하지 않고, 일반적인 설계 원칙을 정리한다.
1. 텍스트 분할 전략
시간 기준 분할: SRT/VTT의 타임스탬프를 기준으로 3~10분 단위 블록으로 나눈다.
의미 단위 분할: "주제 변경" 표현(예: "다음으로 넘어가면...", "정리하자면...")이나 슬라이드 전환 시점을 기준으로 나눈다.
토큰 길이 기준 분할: 요약 모델이 한 번에 처리할 수 있는 토큰 수를 고려해, 일정 문자 수/문장 수마다 블록을 자른다.
이렇게 분할된 각 블록에 대해 개별 요약을 수행하고, 마지막에 이들 요약을 다시 합쳐 전역 요약("요약의 요약")을 만드는 계층적 요약(hierarchical summarization) 전략이 흔히 사용된다.
2. 요약 관점(프롬프트) 설계
요약 모델이나 알고리즘에는, 원하는 요약 형태를 명확히 지시하는 것이 중요하다.
"핵심 결론 위주 요약"
"결정 사항과 담당자, 마감일만 정리"
"질문과 답변 목록만 추출"
"후속 작업(Action Items) 목록 정리"
이런 관점을 각 블록 요약과 최종 요약 단계 모두에 일관되게 적용하면, 긴 문서에서도 구조화된 결과를 얻기 쉽다.
3. 잡음/오류 보정
Whisper가 높은 성능을 보이는 모델이지만, 언어와 녹음 품질에 따라 오탈자나 인식 오류가 발생할 수 있다12. 특히 고유명사, 전문 용어, 약어 등에서 오류가 발생하기 쉬우므로, 요약 전후에 아래와 같은 보정 단계를 둘 수 있다.
자주 쓰이는 용어/이름에 대한 사전(dict) 매핑 적용
가장 긴/중요한 구간은 원음과 함께 빠르게 재검토
동음이의어 문맥 보정(예: 팀 이름 vs 일반 명사)
요약 모델을 사용할 경우, 문맥을 통해 어느 정도 인식 오류를 완화해 주기도 하지만, 중요한 문서라면 사람이 마지막으로 검수하는 것이 안전하다.
실전 워크플로우 예시: 회의 녹음 자동 정리 시스템
다음은 소규모 팀에서 로컬 Whisper와 요약 시스템을 활용해 회의 기록을 자동 정리하는 예시 시나리오이다.
회의 녹음
줌/화상 회의 녹음 또는 스마트폰/녹음기로 로컬 파일(mp3/wav) 저장.
1시간 이상 회의는 30~40분 단위로 나누어 저장(파일 손상/실패 리스크 분산).
Whisper로 텍스트 변환 (CLI 버전)
whisper meeting_2025-01-15_1.mp3 meeting_2025-01-15_2.mp3 --model turbo --language Korean결과로
.txt,.srt파일을 함께 생성한다1.
전처리 스크립트 (파이썬)
각
.txt를 읽어 하나의 긴 텍스트로 합친 뒤,불필요한 반복이나 채팅성 대화를 간단한 규칙으로 제거.
블록별 요약
.srt기준으로 5~10분 단위 블록을 만들고,각 블록에 대해 요약 모델에 "이 구간의 핵심 논의, 결정사항, 액션 아이템을 bullet으로 정리"하라고 요청.
최종 요약 생성
블록별 요약들을 시간 순으로 나열한 뒤,
다시 한 번 요약 모델에 "전체 회의를 1페이지 분량으로 정리"하도록 요청.
별도로 "액션 아이템만 모아 달라", "결정 사항만 따로 정리해 달라"와 같은 후처리도 가능.
보관 및 공유
전체 원문 + 최종 요약 + 액션 아이템 리스트를 Notion/Confluence/사내 위키 등에 저장.
검색을 위해 회의 주제, 프로젝트 이름, 참석자 등을 메타데이터로 기록.
이 과정에서 음성 → 텍스트 변환(2단계)은 Whisper가 로컬에서 담당하므로, 민감한 회의 내용이 외부 서비스로 전송되지 않는다는 장점이 있다13. GPU가 있다면 small 이상 모델을 사용해 정확도와 속도 모두를 확보할 수 있으며, 없는 경우에도 base나 turbo를 CPU에서 사용하는 식으로 충분히 실용적인 시스템을 구축할 수 있다132.
참고
1GitHub - openai/whisper: Robust Speech Recognition via Large-Scale Weak Supervision
2Best open source speech-to-text (STT) model in 2026 (with benchmarks) | Blog -- Northflank
이 노트는 요약·비평·학습 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

