import sys, json, os, glob
from faster_whisper import WhisperModel

VIDEOS_DIR = r"C:\Users\ferna\proyecto cero\_factory_3d_demo\_runs\flow_2026-05-09T22-22-17-495Z_Comfortsleep\_buscar\_downloaded"
OUT_DIR = r"C:\Users\ferna\proyecto cero\_factory_3d_demo\_runs\flow_2026-05-09T22-22-17-495Z_Comfortsleep\_buscar\_transcripts_fb1"
os.makedirs(OUT_DIR, exist_ok=True)

# Solo procesar mis videos fb_*
videos = sorted([v for v in glob.glob(os.path.join(VIDEOS_DIR, "fb_*.mp4"))])
print(f"Found {len(videos)} fb_*.mp4 videos to transcribe", file=sys.stderr)

model = WhisperModel("medium", device="cpu", compute_type="int8")

for vp in videos:
    base = os.path.basename(vp).replace(".mp4", "")
    out_path = os.path.join(OUT_DIR, base + ".json")
    if os.path.exists(out_path):
        print(f"SKIP {base} (exists)", file=sys.stderr)
        continue
    print(f"\n=== Transcribing {base} ===", file=sys.stderr)
    try:
        segments, info = model.transcribe(vp, language="es", beam_size=5, vad_filter=True)
        segs = []
        full = []
        for s in segments:
            segs.append({"start": round(s.start, 2), "end": round(s.end, 2), "text": s.text.strip()})
            full.append(s.text.strip())
        out = {
            "video_path": vp,
            "language": info.language,
            "duration": round(info.duration, 2),
            "text": " ".join(full).strip(),
            "word_count": len(" ".join(full).split()),
            "segments": segs,
        }
        with open(out_path, "w", encoding="utf-8") as f:
            json.dump(out, f, ensure_ascii=False, indent=2)
        print(f"Duration: {out['duration']}s, words: {out['word_count']}", file=sys.stderr)
        print(f"Text preview: {out['text'][:200]}", file=sys.stderr)
    except Exception as e:
        print(f"FAIL {base}: {e}", file=sys.stderr)

print("\nAll done", file=sys.stderr)
