#!/bin/bash
# Mix narration + ducked music + sample-accurate SFX onto a deterministic Fable render.
# Usage: mix-fable-det.sh [16x9|9x16|1x1]   (default 16x9)
set -euo pipefail
ASPECT="${1:-16x9}"
SUF=""; [ "$ASPECT" != "16x9" ] && SUF="-$ASPECT"
P=/Users/davendrapatel/videoclaw/projects/fable-explainer
A="$P/artifacts/audio"
VIN="$P/final/videos/fable-video-only$SUF.mp4"
OUT="$P/final/videos/00-FABLE-master$SUF.mp4"

ffmpeg -y -v error \
  -i "$VIN" \
  -stream_loop -1 -i "$A/soundtrack-64s.mp3" \
  -i "$A/dialogue-0-narrator.wav" -i "$A/dialogue-1-narrator.wav" -i "$A/dialogue-2-narrator.wav" -i "$A/dialogue-3-narrator.wav" \
  -i "$A/dialogue-4-narrator.wav" -i "$A/dialogue-5-narrator.wav" -i "$A/dialogue-6-narrator.wav" -i "$A/dialogue-7-narrator.wav" \
  -i "$A/sfx-54s.wav" \
  -filter_complex "\
[2]adelay=2900|2900[d0];[3]adelay=8900|8900[d1];[4]adelay=14900|14900[d2];[5]adelay=20900|20900[d3];\
[6]adelay=26900|26900[d4];[7]adelay=32900|32900[d5];[8]adelay=38900|38900[d6];[9]adelay=44900|44900[d7];\
[d0][d1][d2][d3][d4][d5][d6][d7]amix=inputs=8:normalize=0[vopre];\
[vopre]volume=1.25,apad=whole_dur=54[vop];[vop]asplit[voA][voB];\
[1]atrim=0:54,asetpts=PTS-STARTPTS,volume=0.22,afade=t=out:st=50:d=4[musv];\
[musv][voA]sidechaincompress=threshold=0.03:ratio=12:attack=20:release=300[musd];\
[10]volume=0.30[sfx];\
[musd][voB][sfx]amix=inputs=3:normalize=0:duration=first[mixraw];\
[mixraw]alimiter=limit=0.95[mix]" \
  -map 0:v -map "[mix]" -c:v copy -c:a aac -ar 48000 -shortest "$OUT"

echo "FINAL[$ASPECT]: $OUT"
ffprobe -v error -show_entries format=duration -of default=nk=1:nw=1 "$OUT" | awk '{printf "  duration %.1fs\n",$1}'
