summaryrefslogtreecommitdiff
path: root/radarFetch.sh
diff options
context:
space:
mode:
Diffstat (limited to 'radarFetch.sh')
-rwxr-xr-xradarFetch.sh22
1 files changed, 15 insertions, 7 deletions
diff --git a/radarFetch.sh b/radarFetch.sh
index 0dcc457..4ba302c 100755
--- a/radarFetch.sh
+++ b/radarFetch.sh
@@ -30,6 +30,7 @@ require_cmd() {
}
require_cmd curl
require_cmd magick
+require_cmd ffmpeg
mkdir -p "$TRANS_DIR" "$FRAMES_DIR" "$PLATES_DIR" "$OUT_DIR"
@@ -167,22 +168,29 @@ if [ "${#composited[@]}" -eq 0 ]; then
exit 0
fi
-# --- 6. Assemble APNG loop -----------------------------------------------
-# Per-frame delays: last frame gets END_PAUSE so the eye can rest on "now".
+# --- 6. Assemble APNG loop via ffmpeg concat demuxer ---------------------
+# ImageMagick's PNG writer on Arch lacks APNG support; ffmpeg's apng muxer
+# handles it. Per-frame durations: last frame gets END_PAUSE.
mkdir -p "$PUBLISH_DIR"
TMP_APNG="${OUT_DIR}/loop.apng.tmp"
+LIST_FILE="${OUT_DIR}/concat.txt"
-build_cmd=(magick -loop 0)
+: > "$LIST_FILE"
last_idx=$(( ${#composited[@]} - 1 ))
for i in "${!composited[@]}"; do
+ printf "file '%s'\n" "${composited[$i]}" >> "$LIST_FILE"
if [ "$i" -eq "$last_idx" ]; then
- build_cmd+=(-delay "$END_PAUSE" "${composited[$i]}")
+ printf "duration %s\n" "$(awk "BEGIN{print $END_PAUSE/100}")" >> "$LIST_FILE"
else
- build_cmd+=(-delay "$FRAME_DELAY" "${composited[$i]}")
+ printf "duration %s\n" "$(awk "BEGIN{print $FRAME_DELAY/100}")" >> "$LIST_FILE"
fi
done
-build_cmd+=("$TMP_APNG")
-"${build_cmd[@]}"
+# ffmpeg concat quirk: last file must be repeated without a duration line
+printf "file '%s'\n" "${composited[$last_idx]}" >> "$LIST_FILE"
+
+ffmpeg -y -hide_banner -loglevel error \
+ -f concat -safe 0 -i "$LIST_FILE" \
+ -plays 0 -f apng "$TMP_APNG"
install -m 644 "$TMP_APNG" "$PUBLISH_PATH"
rm -f "$TMP_APNG"