#!/usr/bin/env bash
# gpu-svt-new-test.sh —— 用新版 ffmpeg 自带的 SVT-AV1 v4.2.0 跑同码率点，对比系统版 1.7.0 的速度/画质
# 用法： bash gpu-svt-new-test.sh <源文件> <输出目录> <ffmpeg路径>
set -uo pipefail

SRC="${1:?源文件}"
OUT="${2:?输出目录}"
FF="${3:-ffmpeg}"
THREADS="${4:-12}"
SEGS=(900 3000 5200)
DUR=40
TSV="$OUT/svtnew.tsv"
mkdir -p "$OUT"
printf 'variant\tenc\tparams\tseg\tbytes\tkbps\tssim\tsecs\n' > "$TSV"

# 等旧任务（系统版 1.7.0 的样本）跑完，避免两个 SVT 抢 CPU
while pgrep -f "gpu-av1-sample.sh" >/dev/null; do sleep 15; done
echo "  旧样本任务已结束，开始新版 SVT-AV1 对比"

V=(
  "svtnew-p4-c21|4|21"
  "svtnew-p6-c21|6|21"
  "svtnew-p4-c19|4|19"
)

echo "═══ 新版 SVT-AV1 对比 ═══"
"$FF" -hide_banner -loglevel info -f lavfi -i color=c=black:s=160x120:d=0.2 -c:v libsvtav1 -preset 12 -crf 50 -y /tmp/vv.mp4 2>&1 | grep -E 'SVT \[version\]' | sed 's/^/  /'

for item in "${V[@]}"; do
  IFS='|' read -r name preset crf <<<"$item"
  for s in "${SEGS[@]}"; do
    out="$OUT/av1-$name-$s.mp4"
    t0=$(date +%s.%N)
    if ! nice -n 19 "$FF" -hide_banner -nostdin -loglevel error -y -ss "$s" -t "$DUR" -i "$SRC" \
        -map 0:v:0 -map "0:a:0?" -c:a aac -b:a 128k \
        -c:v libsvtav1 -preset "$preset" -crf "$crf" \
        -svtav1-params "lp=$THREADS:enable-tf=0:tune=0" -threads "$THREADS" \
        -pix_fmt yuv420p10le -movflags +faststart "$out" 2>"$OUT/err-$name-$s.log"; then
      echo "  ❌ $name @ ${s}s 失败"; continue
    fi
    t1=$(date +%s.%N)
    secs=$(echo "$t1 - $t0" | bc)
    slog="$OUT/ssim-$name-$s.log"
    ssim=$(nice -n 19 "$FF" -hide_banner -nostdin -loglevel error \
        -ss "$s" -t "$DUR" -i "$SRC" -i "$out" \
        -lavfi "[0:v][1:v]ssim=stats_file=$slog" -f null - 2>&1 | grep -o 'All:[0-9.]*' | head -1 | cut -d: -f2)
    b=$(stat -c%s "$out")
    kbps=$(( b * 8 / DUR / 1000 ))
    printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' "$name" "libsvtav1" "preset=$preset crf=$crf" "$s" "$b" "$kbps" "${ssim:-?}" "$secs" >> "$TSV"
    echo "  $name @ ${s}s → ${secs%.*}s（$(printf %.2f "$(echo "40/$secs"|bc -l)")x 实时）  $(du -h "$out"|cut -f1)  ${kbps}kbps  SSIM ${ssim:-?}"
  done
done
echo "✅ 新版 SVT 对比完成"
