Files
handbrake-batch-converter/hanbrake-batch-converteer.sh
2025-07-01 09:46:35 +00:00

75 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# === Default settings ===
HANDBRAKE_CLI="/usr/bin/HandBrakeCLI"
LOG_FILE="./handbrake_convert.log"
# === Read parameters ===
while [[ $# -gt 0 ]]; do
case "$1" in
--source)
SOURCE_DIR="$2"
shift 2
;;
--destination)
DEST_DIR="$2"
shift 2
;;
--mode)
MODE="$2"
shift 2
;;
*)
echo "Unknown parameter: $1"
exit 1
;;
esac
done
# === Check required parameters ===
if [[ -z "$SOURCE_DIR" || -z "$DEST_DIR" || -z "$MODE" ]]; then
echo "Usage: $0 --source /path/to/source --destination /path/to/destination --mode [bluray|dvd]"
exit 1
fi
# === Set presets based on mode ===
case "$MODE" in
bluray)
PRESET_FILE="./profiles/BluRay H.265 HEVC.json"
PRESET_NAME="BluRay H.265 HEVC"
;;
dvd)
PRESET_FILE="./profiles/DVD 720p H.265.json"
PRESET_NAME="DVD 720p H.265"
;;
*)
echo "Invalid mode: $MODE (allowed: bluray, dvd)"
exit 1
;;
esac
# === Recursively find all MKV files ===
find "$SOURCE_DIR" -type f -name "*.mkv" | while read -r input_file; do
# Get relative path
rel_path="${input_file#$SOURCE_DIR/}"
rel_dir="$(dirname "$rel_path")"
# Create matching directory structure in destination
mkdir -p "$DEST_DIR/$rel_dir"
base_name="$(basename "$input_file" .mkv)"
output_file="$DEST_DIR/$rel_dir/$base_name.mkv"
# Convert if output does not exist
if [ ! -f "$output_file" ]; then
echo "$(date +"%Y-%m-%d %H:%M:%S") - Converting: $rel_path" >> "$LOG_FILE"
"$HANDBRAKE_CLI" -i "$input_file" -o "$output_file" \
--preset-import-file "$PRESET_FILE" --preset "$PRESET_NAME" >> "$LOG_FILE" 2>&1
else
echo "$(date +"%Y-%m-%d %H:%M:%S") - Skipped (already exists): $rel_path" >> "$LOG_FILE"
fi
done
echo "$(date +"%Y-%m-%d %H:%M:%S") - Finished!" >> "$LOG_FILE"