import pathlib,json,subprocess
root=pathlib.Path('/tmp/lead-32924-r1/evidence-capture');run=pathlib.Path((root/'latest-capture.txt').read_text())
for item in json.loads((run/'results.json').read_text()):
 name=item['row']['id']+'-'+item['side'];frames=run/(name+'-frames');ts=json.loads((frames/'timestamps.json').read_text());lines=['ffconcat version 1.0']
 for i,t in enumerate(ts):
  delta=((ts[i+1]['relativeMs'] if i+1<len(ts) else item['video']['durationMs'])-t['relativeMs'])/1000
  lines += [f"file '{frames/f'frame-{i:04}.png'}'",'option framerate 1000',f'duration {max(.001,delta):.6f}']
 lines += [f"file '{frames/f'frame-{len(ts)-1:04}.png'}'",'option framerate 1000']
 (frames/'frames-realtime.txt').write_text('\n'.join(lines))
 old=run/(name+'.mp4');draft=run/(name+'-timing-draft.mp4')
 if not draft.exists():old.rename(draft)
 subprocess.run(['ffmpeg','-y','-loglevel','error','-f','concat','-safe','0','-i',str(frames/'frames-realtime.txt'),'-vf','fps=25','-c:v','libx264','-crf','18','-pix_fmt','yuv420p','-movflags','+faststart',str(old)],check=True)
 probe=json.loads(subprocess.check_output(['ffprobe','-v','error','-show_entries','format=duration:stream=width,height','-of','json',str(old)]))
 print(name,probe)
