52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
#!/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())
|