#!/usr/bin/env python3
"""Создаёт контрольную сетку кадров без OCR."""
from __future__ import annotations
import argparse, json, math, subprocess, tempfile
from pathlib import Path
from PIL import Image, ImageDraw

def main():
    ap=argparse.ArgumentParser(); ap.add_argument('video'); ap.add_argument('output'); ap.add_argument('--count',type=int,default=12); ap.add_argument('--cols',type=int,default=3); args=ap.parse_args()
    Path(args.output).parent.mkdir(parents=True,exist_ok=True)
    meta=json.loads(subprocess.check_output(['ffprobe','-v','error','-show_entries','format=duration','-of','json',args.video]))
    dur=float(meta['format']['duration']); times=[dur*(i+0.5)/args.count for i in range(args.count)]
    with tempfile.TemporaryDirectory() as td:
        imgs=[]
        for i,t in enumerate(times):
            p=Path(td)/f'{i:03d}.jpg'; subprocess.run(['ffmpeg','-y','-hide_banner','-loglevel','error','-ss',str(t),'-i',args.video,'-frames:v','1',str(p)],check=True)
            im=Image.open(p).convert('RGB'); im.thumbnail((300,534)); imgs.append((im,t))
        cellw,cellh=300,570; rows=math.ceil(len(imgs)/args.cols); sheet=Image.new('RGB',(cellw*args.cols,cellh*rows),(18,18,18)); d=ImageDraw.Draw(sheet)
        for i,(im,t) in enumerate(imgs):
            x=(i%args.cols)*cellw; y=(i//args.cols)*cellh; sheet.paste(im,(x,y)); d.text((x+8,y+538),f'{t:.1f}s',fill='white')
        sheet.save(args.output,quality=92)
    print(args.output)
if __name__=='__main__': main()
