#!/bin/sh
# Requires FFmpeg/ffprobe with libx264. Tested with FFmpeg 8.0.1 on macOS.
# Run in a fresh directory. Existing named outputs are not overwritten.
set -eu
ffmpeg -hide_banner -loglevel error -n -f lavfi -i 'testsrc2=size=320x180:rate=30:duration=4' \
  -vf "settb=1/90000,setpts='if(lt(N,60),N/(30*TB),(2+(N-60)/15)/TB)'" \
  -fps_mode vfr -c:v libx264 -crf 18 -preset medium -bf 0 -pix_fmt yuv420p \
  -enc_time_base 1:90000 -video_track_timescale 90000 -an synthetic-vfr.mp4
ffmpeg -hide_banner -loglevel error -n -i synthetic-vfr.mp4 \
  -c:v libx264 -crf 18 -preset medium -bf 0 -r 30 -fps_mode cfr -an synthetic-cfr.mp4
for kind in vfr cfr; do
  ffprobe -v error -select_streams v:0 -show_frames \
    -show_entries frame=best_effort_timestamp_time \
    -of json "synthetic-$kind.mp4" > "$kind-frames.json"
  ffprobe -v error -show_streams -show_format -of json \
    "synthetic-$kind.mp4" > "$kind-streams.json"
done
