Files
deskhub/DeskHub-Webseite/tools/demo-video/compose.sh
T
2026-10-24 20:14:46 +00:00

34 lines
2.0 KiB
Bash

#!/usr/bin/env bash
# tools/demo-video/compose.sh: setzt die Aufnahme (raw.mp4) in ein modernes 1080p-Video: Farbverlauf-Hintergrund, abgerundetes Fenster mit Schatten,
# selbst erzeugte Musik (make_music.js) mit Ein- und Ausblenden. Außerdem eine kurze GIF-Vorschau.
# bash tools/demo-video/compose.sh <raw.mp4> <Zielordner>
set -euo pipefail
RAW="${1:?raw.mp4 fehlt}"
OUT="${2:?Zielordner fehlt}"
HERE="$(cd "$(dirname "$0")" && pwd)"
WORK="$OUT/.build"; rm -rf "$WORK"; mkdir -p "$WORK"
DUR="$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$RAW")"
# Maske mit runden Ecken (Fenstergröße 1600x1000, Radius 26)
ffmpeg -loglevel error -y -f lavfi -i "color=c=black:s=1600x1000" -frames:v 1 \
-vf "format=gray,geq=lum='if(lte(hypot(max(max(26-X,X-(W-1-26)),0),max(max(26-Y,Y-(H-1-26)),0)),26),255,0)'" "$WORK/mask.png"
# Musik
node "$HERE/make_music.js" "$WORK/music.wav" "$RAW.events.json"
ffmpeg -loglevel error -y -i "$RAW" -loop 1 -framerate 30 -i "$WORK/mask.png" -i "$WORK/music.wav" \
-f lavfi -i "gradients=s=1920x1080:c0=0A5F95:c1=0E8C7C:x0=0:y0=0:x1=1920:y1=1080:d=$DUR:r=30" \
-filter_complex "[0:v]scale=1600:1000:flags=lanczos,format=yuva420p[rec];\
[1:v]format=gray,split[m1][m2];\
[rec][m1]alphamerge[win];\
[m2]pad=1760:1160:80:80:black,boxblur=38:3[mb];color=c=black:s=1760x1160,format=yuva420p[blka];[mb]format=gray[mbg];[blka][mbg]alphamerge,colorchannelmixer=aa=0.55[sh];\
[3:v]format=yuv420p[bg];\
[bg][sh]overlay=80:-18[t1];[t1][win]overlay=160:40,format=yuv420p[v]" \
-map "[v]" -map 2:a \
-c:v libx264 -crf 19 -preset medium -r 30 -c:a aac -b:a 160k -shortest -movflags +faststart "$OUT/deskhub-demo.mp4"
# GIF-Vorschau: der Teil mit dem digitalen Assistenten (kleiner, für die README)
ffmpeg -loglevel error -y -ss 4 -t 16 -i "$OUT/deskhub-demo.mp4" -an -vf "fps=8,scale=760:-1:flags=lanczos,split[a][b];[a]palettegen=max_colors=128[p];[b][p]paletteuse=dither=bayer:bayer_scale=4" "$OUT/deskhub-demo.gif"
rm -rf "$WORK"
ls -la "$OUT"/deskhub-demo.*