Initial commit
This commit is contained in:
60
scripts/iso-to-mkv
Executable file
60
scripts/iso-to-mkv
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
# Convert ISO files to MKV format with automatic season/episode naming
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SEARCH_DIR="${1:-$(pwd)}"
|
||||
OUT_DIR="${2:-$SEARCH_DIR/out}"
|
||||
|
||||
if [[ ! -d "$SEARCH_DIR" ]]; then
|
||||
echo "[ERROR] Search directory '$SEARCH_DIR' does not exist."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$OUT_DIR"
|
||||
prev_season=""
|
||||
ep=1
|
||||
|
||||
echo "[INFO] Searching for ISO files in '$SEARCH_DIR'..."
|
||||
|
||||
find "$SEARCH_DIR" -type f -iname '*.iso' | sort | while read -r iso; do
|
||||
echo "[INFO] Processing: $iso"
|
||||
parent=$(basename "$(dirname "$iso")")
|
||||
|
||||
if [[ ! $parent =~ S([0-9]+) ]]; then
|
||||
echo "[WARN] Skipping '$iso' - parent directory doesn't match season pattern."
|
||||
continue
|
||||
fi
|
||||
|
||||
season=$(printf "%02d" "${BASH_REMATCH[1]}")
|
||||
|
||||
if [[ "$season" != "$prev_season" ]]; then
|
||||
ep=1
|
||||
prev_season="$season"
|
||||
fi
|
||||
|
||||
ripdir="$OUT_DIR/temp/$parent"
|
||||
mkdir -p "$ripdir" "$OUT_DIR/Season $season"
|
||||
|
||||
echo "[INFO] Ripping ISO with MakeMKV..."
|
||||
if ! snap run makemkv.makemkvcon -r mkv --minlength=1800 iso:"$iso" all "$ripdir"; then
|
||||
echo "[ERROR] Failed to rip '$iso'. Skipping."
|
||||
continue
|
||||
fi
|
||||
|
||||
for mkv in "$ripdir"/*.mkv; do
|
||||
[[ -e "$mkv" ]] || continue
|
||||
out="$OUT_DIR/Season $season/S${season}E$(printf "%02d" "$ep").mkv"
|
||||
echo "[INFO] Converting to: $out"
|
||||
if ffmpeg -nostdin -hide_banner -loglevel error -i "$mkv" \
|
||||
-map 0:v -map 0:a:m:language:eng -map 0:s:m:language:eng \
|
||||
-c copy "$out"; then
|
||||
rm "$mkv"
|
||||
((ep++))
|
||||
else
|
||||
echo "[ERROR] FFmpeg conversion failed for '$mkv'."
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
echo "[INFO] Conversion complete. Output in '$OUT_DIR'."
|
||||
Reference in New Issue
Block a user