#!/bin/bash
# 把 LTX 首尾帧生成的原片处理成"可无缝循环 + 网页友好"的成品
# usage: make_loop.sh <input.mp4> <output.mp4> [crossfade_sec]
set -euo pipefail
IN="$1"; OUT="$2"; XF="${3:-0.4}"

DUR=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$IN")
FPS=$(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of csv=p=0 "$IN" | awk -F/ '{print $1/$2}')
FRAMES=$(ffprobe -v error -select_streams v:0 -count_frames -show_entries stream=nb_read_frames -of csv=p=0 "$IN")
echo "input: ${DUR}s  ${FPS}fps  ${FRAMES} frames"

# 1) 无缝版：把片尾 XF 秒与片头 XF 秒做交叉淡化，消除首尾帧的微小差异
#    做法：主体 = [0, DUR-XF]，结尾与片头叠加
BODY_END=$(python3 -c "print(max(0.1, $DUR - $XF))")
ffmpeg -y -v error -i "$IN" -i "$IN" -filter_complex \
  "[0:v]trim=0:${BODY_END},setpts=PTS-STARTPTS[v0]; \
   [1:v]trim=0:${XF},setpts=PTS-STARTPTS[v1]; \
   [0:v]trim=${BODY_END}:${DUR},setpts=PTS-STARTPTS[v2]; \
   [v2][v1]blend=all_expr='A*(1-T/${XF})+B*(T/${XF})'[bl]; \
   [v0][bl]concat=n=2:v=1:a=0[vout]; \
   [0:a]atrim=0:${BODY_END},asetpts=PTS-STARTPTS[a0]; \
   [1:a]atrim=0:${XF},asetpts=PTS-STARTPTS[a1]; \
   [0:a]atrim=${BODY_END}:${DUR},asetpts=PTS-STARTPTS[a2]; \
   [a2][a1]amix=inputs=2:duration=shortest,volume=1.4[abl]; \
   [a0][abl]concat=n=2:v=0:a=1[aout]" \
  -map "[vout]" -map "[aout]" -c:v libx264 -preset slow -crf 18 -pix_fmt yuv420p \
  -c:a aac -b:a 192k -movflags +faststart "$OUT"

echo "written: $OUT"
ffprobe -v error -show_entries stream=codec_name,width,height,r_frame_rate,duration -of default=noprint_wrappers=1 "$OUT"
ls -la "$OUT"
