scripts/manual_whisper_demo.py
Rama master · réplica de lectura del repositorio original.
"""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())