local.py
Language Python1.3 KB32 lines
"""Local transcription: faster-whisper large-v3-turbo through WhisperX.The default engine. Nothing leaves the machine. int8 on the CPU is the settingthat runs everywhere, Apple Silicon included (CTranslate2 has no Metal backend,so there is no GPU path on a Mac for this step)."""from __future__ import annotationsfrom functools import lru_cachefrom pathlib import Pathfrom ..audio import load_wav16kDEFAULT_MODEL = "large-v3-turbo"@lru_cache(maxsize=2)def _model(name: str, device: str, compute_type: str, language: str | None):import whisperxreturn whisperx.load_model(name, device, compute_type=compute_type, language=language)def transcribe(wav: Path, language: str | None = None, model: str = DEFAULT_MODEL,device: str = "cpu", compute_type: str = "int8", batch_size: int = 8) -> dict:audio = load_wav16k(wav)result = _model(model, device, compute_type, language).transcribe(audio, batch_size=batch_size, language=language)segments = [{"start": float(s["start"]), "end": float(s["end"]), "text": s["text"].strip()}for s in result.get("segments", []) if s.get("text", "").strip()]return {"segments": segments, "language": result.get("language") or language,"model": f"faster-whisper {model} ({compute_type}, {device})"}