"""Manual transcription demo using Whisper.""" from __future__ import annotations # ruff: noqa: E402 import os import sys _REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if _REPO_ROOT not in sys.path: sys.path.insert(0, _REPO_ROOT) # Load .env before accessing any environment variables from utils.env_loader import load as _load_env _load_env() import argparse from pathlib import Path import whisper def transcribe_audio(file_path: str, model_name: str = "base", language: str | None = None) -> str: if not os.path.isfile(file_path): raise FileNotFoundError(f"Audio file not found: {file_path}") model = whisper.load_model(model_name) result = model.transcribe(file_path, language=language) return result.get("text", "").strip() def main() -> int: parser = argparse.ArgumentParser(description="Transcribe an audio file using Whisper.") parser.add_argument("audio", help="Path to the audio file (WAV, MP3, etc.)") parser.add_argument("--model", default="base", help="Whisper model to use (default: base)") parser.add_argument("--lang", help="Optional language hint (e.g., 'en', 'es')") parser.add_argument("--output", help="Optional path to save the transcript as a .txt file") args = parser.parse_args() try: print(f"🧠 Loading Whisper model: {args.model}") transcript = transcribe_audio(args.audio, model_name=args.model, language=args.lang) print("\n--- Transcript ---\n") print(transcript) if args.output: output_path = Path(args.output) output_path.write_text(transcript + "\n", encoding="utf-8") print(f"\nšŸ“„ Transcript saved to: {output_path}") return 0 except Exception as exc: print(f"āŒ Error: {exc}", file=sys.stderr) return 1 if __name__ == "__main__": raise SystemExit(main())