Files
deskhub/DeskHub-Webseite/tools/demo-video/build_video.sh
T
2026-10-23 17:50:23 +00:00

27 lines
1.3 KiB
Bash

#!/usr/bin/env bash
# tools/demo-video/build_video.sh: baut aus den Bildern (Reihenfolge nach Dateiname) das Demo-Video und eine kurze GIF-Vorschau.
# bash tools/demo-video/build_video.sh <Bilderordner> <Zielordner>
# Benötigt ffmpeg.
set -euo pipefail
FRAMES="${1:?Bilderordner fehlt}"
OUT="${2:?Zielordner fehlt}"
SEC="${SECONDS_PER_SLIDE:-3.6}"
mkdir -p "$OUT"
TMP="$OUT/.build"; rm -rf "$TMP"; mkdir -p "$TMP"
LIST="$TMP/list.txt"
: > "$LIST"
i=0
for f in $(ls "$FRAMES"/*.png | sort); do
i=$((i + 1))
clip="$TMP/clip_$(printf '%02d' $i).mp4"
ffmpeg -loglevel error -y -loop 1 -t "$SEC" -i "$f" \
-vf "scale=1440:900,format=yuv420p,fade=t=in:st=0:d=0.45,fade=t=out:st=$(awk "BEGIN{print $SEC-0.45}"):d=0.45" \
-r 25 -c:v libx264 -crf 22 -preset medium -pix_fmt yuv420p "$clip"
echo "file 'clip_$(printf "%02d" $i).mp4'" >> "$LIST"
done
ffmpeg -loglevel error -y -f concat -safe 0 -i "$LIST" -c copy -movflags +faststart "$OUT/deskhub-demo.mp4"
# GIF-Vorschau (kleiner, für die README, weil nicht jede Seite Videos direkt anzeigt)
ffmpeg -loglevel error -y -i "$OUT/deskhub-demo.mp4" -vf "fps=4,scale=800:-1:flags=lanczos,split[a][b];[a]palettegen=max_colors=96[p];[b][p]paletteuse=dither=bayer:bayer_scale=4" "$OUT/deskhub-demo.gif"
rm -rf "$TMP"
ls -la "$OUT"/deskhub-demo.*