75 lines
2.0 KiB
Bash
Executable File
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"
|
|
|