set-movie-creation-date
#!/bin/bash
# macOS: zet de bestand-aanmaakdatum op de ingebedde opnamedatum.
# Zonder argumenten: alleen TEST.MOV naast dit script.
# --all: alle films direct in de scriptmap; --dry-run: alleen tonen.
# Andere argumenten: expliciete bestandspaden.
set -euo pipefail
command -v exiftool >/dev/null || { echo 'ExifTool ontbreekt (brew install exiftool).' >&2; exit 1; }
[[ $(uname -s) == Darwin ]] || { echo 'Dit script vereist macOS.' >&2; exit 1; }
script_dir=$(cd -- "$(dirname -- "$0")" && pwd)
dry_run=false
all=false
files=()
for arg in "$@"; do
case "$arg" in
--dry-run) dry_run=true ;;
--all) all=true ;;
-h|--help)
echo "Gebruik: $0 [--dry-run] [--all | bestand ...]"
echo 'Standaard: alleen TEST.MOV. --all: films naast het script, zonder submappen.'
exit 0 ;;
-*) echo "Onbekende optie: $arg" >&2; exit 1 ;;
*) files+=("$arg") ;;
esac
done
if $all; then
[[ ${#files[@]} -eq 0 ]] || { echo '--all niet combineren met bestandspaden.' >&2; exit 1; }
shopt -s nullglob nocaseglob
files=("$script_dir"/*.{mov,mp4,m4v,avi,mkv,mts,m2ts,3gp,webm,mpg,mpeg})
elif [[ ${#files[@]} -eq 0 ]]; then
files=("$script_dir/TEST.MOV")
fi
status=0
for file in "${files[@]}"; do
[[ "$file" = /* ]] || file="$PWD/$file"
if [[ ! -f "$file" || -L "$file" ]]; then
echo "Overgeslagen (geen regulier bestand of een symlink): $file" >&2
status=1
continue
fi
chosen=''
# Apple-opnamedatum met tijdzone eerst. QuickTime-getallen zijn UTC;
# QuickTimeUTC converteert die naar de lokale tijdzone, inclusief zomertijd.
for tag in Keys:CreationDate UserData:DateTimeOriginal EXIF:DateTimeOriginal QuickTime:CreateDate; do
if ! value=$(exiftool -api QuickTimeUTC=1 -s3 "-$tag" "$file"); then
status=1
break
fi
if [[ "$value" =~ ^[12][0-9]{3}:[0-9]{2}:[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2} ]]; then
chosen="$value"
break
fi
done
if [[ -z "$chosen" ]]; then
echo "Overgeslagen (geen bruikbare opnamedatum): $file"
continue
fi
printf '%s -> %s [%s]\n' "${file##*/}" "$chosen" "$tag"
if ! $dry_run; then
# Alleen het filesystem-attribuut schrijven; de video en ingebedde
# metadata blijven intact. FileModifyDate wordt niet ingesteld.
if ! exiftool "-FileCreateDate=$chosen" "$file"; then
status=1
fi
fi
done
exit "$status"