Kheish 호환성
이 스킬은 repo-local이며 명시적으로 활성화될 때까지 비활성 상태를 유지합니다.
원본 지침이 레거시 도구 이름을 참조하는 경우 다음 Kheish 매핑을 사용하세요:
terminal=>bashweb_extract=>web_fetch, 추가로 검색이 필요한 경우web_searchsearch_files=>grep_search및glob_searchbrowser_*도구는 브라우저 사용 가능한 표면 도구 또는 MCP가 필요합니다. 사용할 수 없는 경우 가장 가까운 표면을 사용하고 명시적으로 알리세요.
지침에서 로컬 도우미 파일을 언급하는 경우 ${KHEISH_SKILL_DIR}에서 해당 파일을 찾으세요.
Whisper - 강력한 음성 인식
OpenAI의 다국어 음성 인식 모델.
Whisper를 사용해야 하는 경우
사용 시기:
- 음성-텍스트 변환 (99개 언어)
- 팟캐스트/비디오 전사
- 회의록 자동화
- 영어로 번역
- 잡음이 있는 오디오 전사
- 다국어 오디오 처리
지표:
- GitHub 스타 72,900개 이상
- 99개 언어 지원
- 680,000시간의 오디오로 학습
- MIT 라이선스
대안 사용 권장:
- AssemblyAI: 관리형 API, 화자 분리
- Deepgram: 실시간 스트리밍 ASR
- Google Speech-to-Text: 클라우드 기반
빠른 시작
설치
# Python 3.8-3.11 필요
pip install -U openai-whisper
# ffmpeg 필요
# macOS: brew install ffmpeg
# Ubuntu: sudo apt install ffmpeg
# Windows: choco install ffmpeg
기본 전사
import whisper
# 모델 로드
model = whisper.load_model("base")
# 전사
result = model.transcribe("audio.mp3")
# 텍스트 출력
print(result["text"])
# 세그먼트 접근
for segment in result["segments"]:
print(f"[{segment['start']:.2f}s - {segment['end']:.2f}s] {segment['text']}")
모델 크기
# 사용 가능한 모델
models = ["tiny", "base", "small", "medium", "large", "turbo"]
# 특정 모델 로드
model = whisper.load_model("turbo") # 가장 빠르고 품질 좋음
| 모델 | 파라미터 | 영어 전용 | 다국어 | 속도 | VRAM |
|---|---|---|---|---|---|
| tiny | 39M | ✓ | ✓ | ~32x | ~1 GB |
| base | 74M | ✓ | ✓ | ~16x | ~1 GB |
| small | 244M | ✓ | ✓ | ~6x | ~2 GB |
| medium | 769M | ✓ | ✓ | ~2x | ~5 GB |
| large | 1550M | ✗ | ✓ | 1x | ~10 GB |
| turbo | 809M | ✗ | ✓ | ~8x | ~6 GB |
권장 사항: 속도와 품질 균형에는 turbo, 프로토타이핑에는 base 사용
전사 옵션
언어 지정
# 언어 자동 감지
result = model.transcribe("audio.mp3")
# 언어 지정 (더 빠름)
result = model.transcribe("audio.mp3", language="en")
# 지원 언어: en, es, fr, de, it, pt, ru, ja, ko, zh 외 89개
작업 선택
# 전사 (기본값)
result = model.transcribe("audio.mp3", task="transcribe")
# 영어로 번역
result = model.transcribe("spanish.mp3", task="translate")
# 입력: 스페인어 오디오 → 출력: 영어 텍스트
초기 프롬프트
# 컨텍스트로 정확도 향상
result = model.transcribe(
"audio.mp3",
initial_prompt="This is a technical podcast about machine learning and AI."
)
# 다음에 유용:
# - 기술 용어
# - 고유 명사
# - 도메인 특화 어휘
타임스탬프
# 단어 수준 타임스탬프
result = model.transcribe("audio.mp3", word_timestamps=True)
for segment in result["segments"]:
for word in segment["words"]:
print(f"{word['word']} ({word['start']:.2f}s - {word['end']:.2f}s)")
온도 대체
# 신뢰도가 낮은 경우 다른 온도로 재시도
result = model.transcribe(
"audio.mp3",
temperature=(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)
)
명령줄 사용법
# 기본 전사
whisper audio.mp3
# 모델 지정
whisper audio.mp3 --model turbo
# 출력 형식
whisper audio.mp3 --output_format txt # 일반 텍스트
whisper audio.mp3 --output_format srt # 자막
whisper audio.mp3 --output_format vtt # WebVTT
whisper audio.mp3 --output_format json # 타임스탬프 포함 JSON
# 언어
whisper audio.mp3 --language Spanish
# 번역
whisper spanish.mp3 --task translate
배치 처리
import os
audio_files = ["file1.mp3", "file2.mp3", "file3.mp3"]
for audio_file in audio_files:
print(f"{audio_file} 전사 중...")
result = model.transcribe(audio_file)
# 파일로 저장
output_file = audio_file.replace(".mp3", ".txt")
with open(output_file, "w") as f:
f.write(result["text"])
실시간 전사
# 스트리밍 오디오에는 faster-whisper 사용
# pip install faster-whisper
from faster_whisper import WhisperModel
model = WhisperModel("base", device="cuda", compute_type="float16")
# 스트리밍 방식으로 전사
segments, info = model.transcribe("audio.mp3", beam_size=5)
for segment in segments:
print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")
GPU 가속
import whisper
# GPU가 사용 가능하면 자동으로 사용
model = whisper.load_model("turbo")
# CPU 강제
model = whisper.load_model("turbo", device="cpu")
# GPU 강제
model = whisper.load_model("turbo", device="cuda")
# GPU에서 10-20배 빠름
다른 도구와 통합
자막 생성
# SRT 자막 생성
whisper video.mp4 --output_format srt --language English
# 출력: video.srt
LangChain과 함께 사용
from langchain.document_loaders import WhisperTranscriptionLoader
loader = WhisperTranscriptionLoader(file_path="audio.mp3")
docs = loader.load()
# RAG에서 전사 사용하기
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
vectorstore = Chroma.from_documents(docs, OpenAIEmbeddings())
비디오에서 오디오 추출
# ffmpeg를 사용하여 오디오 추출
ffmpeg -i video.mp4 -vn -acodec pcm_s16le audio.wav
# 그런 다음 전사
whisper audio.wav
모범 사례
- turbo 모델 사용 - 영어에서 최고의 속도/품질
- 언어 지정 - 자동 감지보다 빠름
- 초기 프롬프트 추가 - 기술 용어 개선
- GPU 사용 - 10-20배 빠름
- 배치 처리 - 더 효율적
- WAV로 변환 - 호환성 향상
- 긴 오디오 분할 - 30분 미만 청크
- 언어 지원 확인 - 언어별 품질 차이
- faster-whisper 사용 - openai-whisper보다 4배 빠름
- VRAM 모니터링 - 하드웨어에 맞게 모델 크기 조정
성능
| 모델 | 실시간 계수 (CPU) | 실시간 계수 (GPU) |
|---|---|---|
| tiny | ~0.32 | ~0.01 |
| base | ~0.16 | ~0.01 |
| turbo | ~0.08 | ~0.01 |
| large | ~1.0 | ~0.05 |
실시간 계수: 0.1 = 실시간보다 10배 빠름
언어 지원
주요 지원 언어:
- 영어 (en)
- 스페인어 (es)
- 프랑스어 (fr)
- 독일어 (de)
- 이탈리아어 (it)
- 포르투갈어 (pt)
- 러시아어 (ru)
- 일본어 (ja)
- 한국어 (ko)
- 중국어 (zh)
전체 목록: 총 99개 언어
한계점
- 환각 - 텍스트를 반복하거나 생성할 수 있음
- 긴 형식 정확도 - 30분 이상 오디오에서 성능 저하
- 화자 식별 - 화자 분리 기능 없음
- 억양 - 품질이 다양함
- 배경 소음 - 정확도에 영향을 줄 수 있음
- 실시간 지연 - 라이브 자막에는 부적합
리소스
- GitHub: https://github.com/openai/whisper ⭐ 72,900+
- 논문: https://arxiv.org/abs/2212.04356
- 모델 카드: https://github.com/openai/whisper/blob/main/model-card.md
- Colab: 저장소에서 사용 가능
- 라이선스: MIT