#!/usr/bin/env bash
set -euo pipefail
LAB_OUT="${1:?Usage: bash generate.sh /absolute/output-directory}"
mkdir -p "$LAB_OUT"/{360,540,720}
ffmpeg -hide_banner -loglevel error -y \
  -f lavfi -i 'testsrc2=size=1280x720:rate=30' -f lavfi -i 'sine=frequency=440:sample_rate=48000' \
  -t 60 -c:v libx264 -preset veryfast -crf 20 -pix_fmt yuv420p -g 60 -keyint_min 60 -sc_threshold 0 \
  -c:a aac -b:a 96k -movflags +faststart "$LAB_OUT/source.mp4"
ffmpeg -hide_banner -loglevel error -y -i "$LAB_OUT/source.mp4" -map 0 -c copy "$LAB_OUT/remux.mkv"
ffmpeg -hide_banner -loglevel error -y -i "$LAB_OUT/source.mp4" \
  -filter_complex '[0:v]split=3[a][b][c];[a]scale=640:360[v0];[b]scale=960:540[v1];[c]scale=1280:720[v2]' \
  -map '[v0]' -map 0:a -map '[v1]' -map 0:a -map '[v2]' -map 0:a \
  -c:v libx264 -preset veryfast -pix_fmt yuv420p -g 60 -keyint_min 60 -sc_threshold 0 \
  -b:v:0 600k -maxrate:v:0 660k -bufsize:v:0 1200k \
  -b:v:1 1200k -maxrate:v:1 1320k -bufsize:v:1 2400k \
  -b:v:2 2400k -maxrate:v:2 2640k -bufsize:v:2 4800k \
  -c:a aac -b:a 96k -ar 48000 -f hls -hls_time 4 -hls_playlist_type vod \
  -hls_flags independent_segments -master_pl_name master.m3u8 \
  -var_stream_map 'v:0,a:0,name:360 v:1,a:1,name:540 v:2,a:2,name:720' \
  -hls_segment_filename "$LAB_OUT/%v/segment_%03d.ts" "$LAB_OUT/%v/index.m3u8"
ffprobe -v error -show_streams -show_format -of json "$LAB_OUT/source.mp4" > "$LAB_OUT/probe.json"
printf 'Generated source, remux and three HLS renditions in %s\n' "$LAB_OUT"
