#!/bin/bash
# silence-detect: Find silence gaps in audio files
# Usage: silence-detect <audio_file> [min_duration=2] [noise_threshold=-40dB]
#
# Output: silence regions with start, end, and duration

set -euo pipefail

FILE="${1:?Usage: silence-detect <audio_file> [min_duration=2] [noise_db=-40]}"
MIN_DUR="${2:-2}"
NOISE_DB="${3:--40}"

if [[ ! -f "$FILE" ]]; then
    echo "Error: File not found: $FILE" >&2
    exit 1
fi

echo "# Silence detection for: $(basename "$FILE")"
echo "# Min duration: ${MIN_DUR}s, Noise threshold: ${NOISE_DB}dB"
echo "#"
echo "# START      END        DURATION"

ffmpeg -i "$FILE" -af "silencedetect=noise=${NOISE_DB}dB:d=${MIN_DUR}" -f null - 2>&1 | \
    grep -E "silence_start|silence_end" | \
    awk '
    /silence_start/ { start = $NF }
    /silence_end/ {
        split($0, a, "silence_end: ")
        split(a[2], b, " ")
        end = b[1]
        dur = end - start
        printf "%02d:%02d:%02d  %02d:%02d:%02d  %6.1fs\n", \
            int(start/3600), int((start%3600)/60), int(start%60), \
            int(end/3600), int((end%3600)/60), int(end%60), dur
    }'
