Communitygithub.com

Kheish - 음성 인식 (Whisper)

OpenAI의 다국어 음성 인식 모델 Whisper를 기반으로 99개 언어의 전사, 영어 번역, 언어 식별을 지원하는 AI 에이전트 스킬입니다.

Kheish - 음성 인식 (Whisper)란 무엇인가요?

이 스킬은 OpenAI의 Whisper 모델을 AI 에이전트 환경에서 사용할 수 있도록 설계되었습니다. Whisper는 tiny(39M 파라미터)부터 large(1550M 파라미터)까지 6가지 모델 크기를 제공하며, 다국어 음성-텍스트 변환, 영어 번역, 언어 식별 기능을 갖추고 있습니다. CLI와 Python API를 모두 지원하며, 모델은 GPU 가속을 통해 실시간보다 10~20배 빠르게 동작할 수 있습니다. 또한 초기 프롬프트, 온도 설정, 단어 수준 타임스탬프 등 다양한 전사 옵션을 제공하여 높은 정확도를 보장합니다. 이 스킬은 repo-local로 동작하며, 활성화 전까지 비활성 상태를 유지합니다.

지원 대상~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/graniet/kheish/tree/HEAD/skills/mlops/models/whisper

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Kheish 호환성

이 스킬은 repo-local이며 명시적으로 활성화될 때까지 비활성 상태를 유지합니다.

원본 지침이 레거시 도구 이름을 참조하는 경우 다음 Kheish 매핑을 사용하세요:

  • terminal => bash
  • web_extract => web_fetch, 추가로 검색이 필요한 경우 web_search
  • search_files => grep_search 및 glob_search
  • browser_* 도구는 브라우저 사용 가능한 표면 도구 또는 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
tiny39M✓✓~32x~1 GB
base74M✓✓~16x~1 GB
small244M✓✓~6x~2 GB
medium769M✓✓~2x~5 GB
large1550M✗✓1x~10 GB
turbo809M✗✓~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

모범 사례

  1. turbo 모델 사용 - 영어에서 최고의 속도/품질
  2. 언어 지정 - 자동 감지보다 빠름
  3. 초기 프롬프트 추가 - 기술 용어 개선
  4. GPU 사용 - 10-20배 빠름
  5. 배치 처리 - 더 효율적
  6. WAV로 변환 - 호환성 향상
  7. 긴 오디오 분할 - 30분 미만 청크
  8. 언어 지원 확인 - 언어별 품질 차이
  9. faster-whisper 사용 - openai-whisper보다 4배 빠름
  10. 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개 언어

한계점

  1. 환각 - 텍스트를 반복하거나 생성할 수 있음
  2. 긴 형식 정확도 - 30분 이상 오디오에서 성능 저하
  3. 화자 식별 - 화자 분리 기능 없음
  4. 억양 - 품질이 다양함
  5. 배경 소음 - 정확도에 영향을 줄 수 있음
  6. 실시간 지연 - 라이브 자막에는 부적합

리소스

관련 스킬