#!/usr/bin/env python3 """Transcribe one audio file with whisper.cpp; do not generate a protocol.""" from __future__ import annotations import argparse import sys from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[1] if str(REPO_ROOT) not in sys.path: sys.path.insert(0, str(REPO_ROOT)) from src.meeting_lab.transcription.whisper import ( # noqa: E402 TranscriptionError, transcribe_audio, ) def parse_args(argv: list[str] | None = None) -> argparse.Namespace: parser = argparse.ArgumentParser(description="Create a compact Meeting Lab transcript with whisper.cpp.") parser.add_argument("audio_file", type=Path) parser.add_argument("--model", type=Path, required=True, help="Path to a whisper.cpp GGML model.") parser.add_argument("--output-dir", type=Path, required=True) parser.add_argument("--language", default="auto", help="Language code or 'auto' (default: auto).") parser.add_argument("--threads", default="auto", help="Thread count or 'auto' for physical CPU cores (default: auto).") parser.add_argument("--whisper-executable", default="whisper-cli", help="whisper.cpp CLI executable (default: whisper-cli).") return parser.parse_args(argv) def main(argv: list[str] | None = None) -> int: args = parse_args(argv) try: result = transcribe_audio( args.audio_file, args.model, args.output_dir, args.language, executable=args.whisper_executable, threads=args.threads, ) except TranscriptionError as exc: print(f"Error: {exc}") return 1 print(f"Transcript: {result.transcript_json}") print(f"Runtime: {result.runtime_seconds:.3f} seconds") return 0 if __name__ == "__main__": raise SystemExit(main())