import json, pathlib, shutil, subprocess, sys
proof = json.loads(pathlib.Path(sys.argv[1]).read_text())
out = pathlib.Path(sys.argv[2])
out.mkdir(parents=True, exist_ok=True)
for side in ('base','head'):
    part_files = []
    for i, video in enumerate(proof[side]['videos']):
        part = out / f'{side}-part-{i+1}.mp4'
        # Hold result clips for three seconds so the outcome can be read.
        vf = 'fps=25,format=yuv420p' + (',tpad=stop_mode=clone:stop_duration=3' if i % 2 else '')
        subprocess.run(['ffmpeg','-y','-v','error','-i',video,'-vf',vf,'-an','-c:v','libx264','-preset','fast','-crf','20',str(part)],check=True)
        part_files.append(part)
        subprocess.run(['ffmpeg','-y','-v','error','-i',str(part),'-vf','fps=2,scale=320:-1,tile=5x8',str(out/f'{side}-inspect-{i+1}-%02d.png')],check=True)
    listing = out / f'{side}-concat.txt'
    listing.write_text(''.join(f"file '{p.name}'\n" for p in part_files))
    subprocess.run(['ffmpeg','-y','-v','error','-f','concat','-safe','0','-i',str(listing),'-c','copy','-movflags','+faststart',str(out/f'{side}-recording.mp4')],check=True)
    for capture in proof[side]['captures']:
        name = pathlib.Path(capture).name
        shutil.copyfile(capture, out / f'{side}-{name}')
