#!/bin/bash
# rip_cd.sh —— 逐轨无损转录 CD（cdparanoia 校验抓轨 → WAV → ffmpeg 编码 FLAC）
# 用法: bash rip_cd.sh [输出目录] [起始轨] [结束轨]
set -uo pipefail
OUT="${1:-/home/zyw/Downloads/dl-hub/68-CD转录/FLAC}"
START="${2:-1}"
END="${3:-11}"
DEV=/dev/sr0
mkdir -p "$OUT"
cd "$OUT" || exit 1

echo "=== 开始转录 $(date '+%F %T') ==="
for t in $(seq "$START" "$END"); do
  src="${OUT}/.track$(printf '%02d' "$t").wav"
  dst="${OUT}/track$(printf '%02d' "$t").flac"
  if [[ -f "$dst" ]]; then echo "  [轨 $t] 已存在，跳过"; continue; fi
  echo "--- [轨 $t] 抓轨（含完整校验 -Z）$(date '+%T')"
  cdparanoia -d "$DEV" -Z "$t" "$src" > "$OUT/.track$(printf '%02d' "$t").log" 2>&1
  rc=$?
  grep -aE "Done|error|Error|Finished|scratch|skip|WARNING|correction" "$OUT/.track$(printf '%02d' "$t").log" | tail -5
  [[ $rc -ne 0 ]] && echo "  [轨 $t] ⚠️ cdparanoia 退出码 $rc（详见 .track$(printf '%02d' "$t").log）"
  [[ -f "$src" ]] || { echo "  [轨 $t] ❌ 无输出"; continue; }
  echo "  [轨 $t] 编码 FLAC（level 8 无损）"
  ffmpeg -y -v error -i "$src" -c:a flac -compression_level 8 \
    -metadata track="$t" -metadata genre="Chanson" "$dst" || { echo "  ❌ 编码失败"; continue; }
  rm -f "$src"
  ls -la "$dst" | awk '{printf "  ✅ %s  %.1f MB\n", $9, $5/1048576}'
done
echo "=== 结束 $(date '+%F %T') ==="
ls -la "$OUT"/*.flac 2>/dev/null | wc -l
