from pathlib import Path
import json, time
from faster_whisper import WhisperModel, BatchedInferencePipeline

BASE=Path('/home/agent/outputs/furkastrasse_pl_jourfix_20260812')
SRC=BASE/'source/260812_Furkastrasse_PL_Jourfix.mp4'
OUT=BASE/'transcription'; OUT.mkdir(parents=True,exist_ok=True)
model=WhisperModel('large-v3', device='cuda', compute_type='float16')
batched=BatchedInferencePipeline(model=model)
segments, info=batched.transcribe(str(SRC), language='de', batch_size=16, beam_size=5, vad_filter=True, word_timestamps=False)
items=[]
t0=time.time()
with (OUT/'whisper_large_v3_transcript.txt').open('w',encoding='utf-8') as txt:
    for n,s in enumerate(segments,1):
        item={'start':s.start,'end':s.end,'text':s.text.strip()}
        items.append(item)
        txt.write(f"[{s.start:8.2f} --> {s.end:8.2f}] {s.text.strip()}\n")
        if n%50==0:
            (OUT/'whisper_large_v3_progress.json').write_text(json.dumps({'segments':n,'last_end':s.end,'elapsed':time.time()-t0},ensure_ascii=False,indent=2),encoding='utf-8')
(OUT/'whisper_large_v3_segments.json').write_text(json.dumps({'language':info.language,'language_probability':info.language_probability,'duration':info.duration,'segments':items},ensure_ascii=False,indent=2),encoding='utf-8')
(OUT/'whisper_large_v3_progress.json').write_text(json.dumps({'done':True,'segments':len(items),'last_end':items[-1]['end'] if items else 0,'elapsed':time.time()-t0},ensure_ascii=False,indent=2),encoding='utf-8')
print(json.dumps({'language':info.language,'probability':info.language_probability,'duration':info.duration,'segments':len(items),'elapsed':time.time()-t0},ensure_ascii=False))
