171 lines
4.0 KiB
Bash
Executable File
171 lines
4.0 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
||
IMG_INPUT="$SCRIPT_DIR/../assets/images/originals"
|
||
VID_INPUT="$SCRIPT_DIR/../assets/videos/originals"
|
||
|
||
BASE_OUTPUT="$SCRIPT_DIR/../assets"
|
||
|
||
IMAGE_SIZES=(480 720 1024 1366 1600 1920 2560 3840)
|
||
IMAGE_FORMATS=("avif" "webp" "jpeg")
|
||
|
||
echo "$SCRIPT_DIR"
|
||
echo "$BASE_OUTPUT"
|
||
|
||
# Videonamen (Ordner)
|
||
VIDEO_NAMES=(
|
||
"nHD"
|
||
"FWVGA"
|
||
"qHD"
|
||
"HD"
|
||
"HDplus"
|
||
"FullHD"
|
||
"1440p"
|
||
"4K"
|
||
)
|
||
|
||
# Videogrößen (ffmpeg scale)
|
||
VIDEO_SCALES=(
|
||
"640:360"
|
||
"854:480"
|
||
"960:540"
|
||
"1280:720"
|
||
"1600:900"
|
||
"1920:1080"
|
||
"2560:1440"
|
||
"3840:2160"
|
||
)
|
||
VIDEO_FORMATS=("mp4" "webm")
|
||
|
||
###############################################
|
||
# BILDER
|
||
###############################################
|
||
process_images() {
|
||
echo "🖼️ Starte Bildverarbeitung..."
|
||
|
||
for img in "$IMG_INPUT"/*.png; do
|
||
[ -e "$img" ] || continue
|
||
|
||
filename=$(basename "$img")
|
||
name="${filename%.*}"
|
||
|
||
width=$(magick identify -format "%w" "$img")
|
||
height=$(magick identify -format "%h" "$img")
|
||
orientation="landscape"
|
||
[ "$height" -gt "$width" ] && orientation="portrait"
|
||
|
||
echo "Bild: $filename ($orientation)"
|
||
|
||
for size in "${IMAGE_SIZES[@]}"; do
|
||
for fmt in "${IMAGE_FORMATS[@]}"; do
|
||
|
||
OUT_DIR="$BASE_OUTPUT/images/$size/$fmt"
|
||
mkdir -p "$OUT_DIR"
|
||
|
||
OUT_FILE="$OUT_DIR/$name.$fmt"
|
||
|
||
if [ -f "$OUT_FILE" ]; then
|
||
echo "⏩ Skip: $name.$fmt existiert bereits ($size)"
|
||
continue
|
||
fi
|
||
|
||
if [ "$orientation" = "landscape" ]; then
|
||
magick "$img" -resize "${size}" "$OUT_FILE"
|
||
else
|
||
magick "$img" -resize "x${size}" "$OUT_FILE"
|
||
fi
|
||
|
||
done
|
||
done
|
||
done
|
||
}
|
||
|
||
###############################################
|
||
# VIDEOS
|
||
###############################################
|
||
process_videos() {
|
||
echo "🎬 Starte Videobearbeitung..."
|
||
|
||
for vid in "$VID_INPUT"/*.mp4; do
|
||
[ -e "$vid" ] || continue
|
||
|
||
filename=$(basename "$vid")
|
||
name="${filename%.*}"
|
||
|
||
echo "Video: $filename"
|
||
|
||
# Original-Auflösung auslesen
|
||
width=$(ffprobe -v error -select_streams v:0 -show_entries stream=width \
|
||
-of csv=p=0 "$vid")
|
||
height=$(ffprobe -v error -select_streams v:0 -show_entries stream=height \
|
||
-of csv=p=0 "$vid")
|
||
|
||
# Orientierung bestimmen
|
||
if [ "$width" -gt "$height" ]; then
|
||
orientation="landscape"
|
||
else
|
||
orientation="portrait"
|
||
fi
|
||
|
||
echo "➡️ Orientierung erkannt: $orientation (${width}x${height})"
|
||
|
||
# über Index 0–7 iterieren
|
||
for i in "${!VIDEO_NAMES[@]}"; do
|
||
res="${VIDEO_NAMES[$i]}"
|
||
scale="${VIDEO_SCALES[$i]}"
|
||
|
||
# Scale für Portrait drehen
|
||
if [ "$orientation" = "landscape" ]; then
|
||
target_scale="$scale"
|
||
else
|
||
IFS=':' read -r sw sh <<< "$scale"
|
||
target_scale="${sh}:${sw}"
|
||
fi
|
||
|
||
for vfmt in "${VIDEO_FORMATS[@]}"; do
|
||
|
||
OUT_DIR="$BASE_OUTPUT/videos/$res/$vfmt"
|
||
mkdir -p "$OUT_DIR"
|
||
|
||
OUT_FILE="$OUT_DIR/$name.$vfmt"
|
||
|
||
if [ -f "$OUT_FILE" ]; then
|
||
echo "⏩ Skip: $name.$vfmt existiert bereits ($res)"
|
||
continue
|
||
fi
|
||
|
||
echo "🎞️ Render: $name.$vfmt → $target_scale ($res)"
|
||
|
||
if [ "$vfmt" = "mp4" ]; then
|
||
ffmpeg -y -i "$vid" -vf "scale=$target_scale" \
|
||
-c:v libx264 -crf 23 -preset medium \
|
||
-c:a copy \
|
||
"$OUT_FILE"
|
||
else
|
||
ffmpeg -y -i "$vid" -vf "scale=$target_scale" \
|
||
-c:v libvpx-vp9 -b:v 0 -crf 32 \
|
||
-c:a libopus \
|
||
"$OUT_FILE"
|
||
fi
|
||
|
||
done
|
||
done
|
||
done
|
||
}
|
||
|
||
|
||
###############################################
|
||
echo "----------------------------------------------"
|
||
echo " Bratonischer Medien-Konverter gestartet"
|
||
echo " Skriptort: $SCRIPT_DIR"
|
||
echo "----------------------------------------------"
|
||
|
||
process_images
|
||
process_videos
|
||
|
||
echo "----------------------------------------------"
|
||
echo " Fertig! Nur fehlende Dateien wurden erzeugt."
|
||
echo "----------------------------------------------"
|
||
|