#!/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"