#!/bin/bash
# finalize_cd.sh —— 按封底曲目命名、写 ID3/Vorbis 元数据、校验 FLAC 完整性并生成 MD5
set -uo pipefail
SRC=/home/zyw/Downloads/dl-hub/68-CD转录/FLAC
OUT=/home/zyw/Downloads/dl-hub/68-CD转录/01-无损FLAC-按曲目命名
mkdir -p "$OUT"
ALBUM="法国·朋友 France·Friends"
ARTIST="理查德·克莱德曼 Richard Clayderman（理察·克莱德曼/狄亚哥/尚菲利浦·奥汀/安吉利斯/伯瑞利 + 法国天使之音合唱团）"

# 轨号|英文曲名|中文曲名
TRACKS=(
"01|Friends|朋友"
"02|Place De Sun Airport - Listen To The Sea|日光机场 · 听海"
"03|River Of The Blues|忧郁之河"
"04|The Fool|傻瓜"
"05|Have You Changed|是你变了吗"
"06|Stop Saying I Love You|绝口不提！爱你"
"07|Otala|流浪到淡水"
"08|Listen To The Sea|听海"
"09|Love Me Forever|爱我"
"10|The Childish One|孩子气"
"11|Giving All My Love|用情"
)

echo "=== 校验 + 写标签 + 命名 $(date '+%T')"
: > "$OUT/MD5SUMS.txt"
ok=0; bad=0
for row in "${TRACKS[@]}"; do
  IFS='|' read -r no en zh <<< "$row"
  src="$SRC/track${no}.flac"
  [[ -f "$src" ]] || { echo "  ❌ 缺 track${no}.flac"; bad=$((bad+1)); continue; }
  # 命名: 曲目号-英文名-中文名.flac
  safe_en=$(echo "$en" | tr -d '/')
  dst="$OUT/${no}-${safe_en}（${zh}）.flac"
  # 完整性校验：完整解码一遍，捕获错误
  err=$(ffmpeg -v error -i "$src" -f null - 2>&1 | head -3)
  dur=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$src")
  if [[ -n "$err" ]]; then echo "  ⚠️ track${no} 解码告警: $err"; fi
  # 写元数据（-c:a copy 不重编码，只是重封装标签）
  ffmpeg -y -v error -i "$src" -c:a copy \
     -metadata title="${en}（${zh}）" -metadata album="$ALBUM" -metadata artist="$ARTIST" \
     -metadata track="$no" -metadata genre="Instrumental / Chanson" -metadata date="1985" \
     "$dst"
  md5=$(md5sum "$dst" | awk '{print $1}')
  printf "%s  %s\n" "$md5" "$(basename "$dst")" >> "$OUT/MD5SUMS.txt"
  printf "  ✅ %s  %5.1fs  %.1f MB  md5=%s\n" "$(basename "$dst")" "$dur" "$(stat -c %s "$dst" | awk '{print $1/1048576}')" "${md5:0:12}"
  ok=$((ok+1))
done
echo "=== 成功 $ok / 失败 $bad"
echo "=== 汇总信息:"
ffprobe -v error -show_entries stream=codec_name,sample_rate,channels,bits_per_raw_sample -of default=noprint_wrappers=1 "$OUT"/01-*.flac
echo "=== 总大小:"; du -sh "$OUT"
