#!/bin/bash
# Render one scene: 2 B-roll images with ken burns crossfade + ASS karaoke + audio
# Usage: ./render_scene.sh <scene_name> <img_a> <img_b> <audio_mp3> <ass_file> <out_mp4>
set -euo pipefail

SCENE="${1}"
IMG_A="${2}"
IMG_B="${3}"
AUDIO="${4}"
ASS="${5}"
OUT="${6}"

DUR=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$AUDIO")
FPS=30
HALF=$(python3 -c "print(f'{$DUR/2:.3f}')")
CROSS=0.4

echo "[$SCENE] dur=$DUR half=$HALF"

# Build: image A with zoompan → 0..half+cross, image B with zoompan → half..dur
# Both scaled to 1080x1920, crop to fill, ken burns.
# ASS applied last.
# ffmpeg zoompan needs frames count = dur*fps

TOT_FRAMES_A=$(python3 -c "print(int(($HALF + $CROSS) * $FPS))")
TOT_FRAMES_B=$(python3 -c "print(int(($DUR - $HALF + $CROSS) * $FPS))")

# Escape ASS path for filter
ASS_ESC=$(printf '%s' "$ASS" | sed 's/:/\\\\:/g')

ffmpeg -y \
  -loop 1 -framerate $FPS -t "$(python3 -c "print($HALF + $CROSS)")" -i "$IMG_A" \
  -loop 1 -framerate $FPS -t "$(python3 -c "print($DUR - $HALF + $CROSS)")" -i "$IMG_B" \
  -i "$AUDIO" \
  -filter_complex "\
[0:v]scale=1620:2880:force_original_aspect_ratio=increase,crop=1080:1920,zoompan=z='min(zoom+0.0008,1.15)':d=${TOT_FRAMES_A}:s=1080x1920:fps=${FPS},setsar=1,format=yuv420p[a];\
[1:v]scale=1620:2880:force_original_aspect_ratio=increase,crop=1080:1920,zoompan=z='if(lte(zoom,1.0),1.15,max(1.001,zoom-0.0008))':d=${TOT_FRAMES_B}:s=1080x1920:fps=${FPS},setsar=1,format=yuv420p[b];\
[a][b]xfade=transition=fade:duration=${CROSS}:offset=${HALF}[bg];\
[bg]subtitles=${ASS_ESC}:fontsdir=/home/mia/.fonts/px3lab[v]" \
  -map "[v]" -map "2:a" \
  -c:v libx264 -pix_fmt yuv420p -preset medium -crf 20 \
  -c:a aac -b:a 192k -ar 48000 \
  -movflags +faststart \
  -shortest \
  "$OUT"

echo "[done] $OUT"
