gifs
ich habe eine seite angelegt, auf der alle gifs aufgelistet sind, die ich hier auf wirres.net bisher benutzt habe: alle gifs auf wirres.net
eigentlich nutze ich schon lange keine gifs mehr, sondern loope kleine video-dateien (ein mp4 mit den attributen autoplay loop muted playsinline). das klappt in fast allen modernen browsern und ist effektiver als gifs, die meist ein mehrfaches an dateigrösse mitbringen. das machen die grossen plattformen auch schon seit längerer zeit (ca. 2014 fing twitter damit an).
aber ich habe jetzt wieder angefangen gifs zu benutzen als fallback für die video-dateien im RSS-feed. da die meisten anbieter von rss-readern video-attribute ausfiltern, funktionieren die videodateien im feed meistens nicht. also gebe ich per RSS gifs, statt video-loops aus — wenn ich nicht vergesse das gif-fallback zu erzeugen und hochzuladen.
ein mp4 zu einem anständigen gif umwandeln geht mit diesem script ganz einfach (wenn ffmpeg installiert ist):
#!/usr/bin/env bash
set -euo pipefail
if [ $# -lt 1 ]; then
echo "Usage: $0 input.mp4 [fps] [width]" >&2
exit 1
fi
INPUT="$1"
FPS="${2:-15}" # Default: 15 fps
WIDTH="${3:-640}" # Default: 640px Breite
if [ ! -f "$INPUT" ]; then
echo "Input file not found: $INPUT" >&2
exit 1
fi
BASENAME="$(basename "$INPUT")"
NAME="${BASENAME%.*}"
# temporäre Palette
PALETTE="$(mktemp "/tmp/${NAME}_palette_XXXX.png")"
OUTPUT_GIF="${NAME}.gif"
# Palette erzeugen
ffmpeg -y -i "$INPUT" \
-vf "fps=${FPS},scale=${WIDTH}:-1:flags=lanczos,palettegen" \
"$PALETTE"
# GIF erzeugen
ffmpeg -y -i "$INPUT" -i "$PALETTE" \
-lavfi "fps=${FPS},scale=${WIDTH}:-1:flags=lanczos[x];[x][1:v]paletteuse" \
"$OUTPUT_GIF"
rm -f "$PALETTE"
echo "$OUTPUT_GIF"
das script analysiert zuerst die farben des videos und passt die (eingeschränkte) farbpalette für das gif entsprechend an.
beispiel:
mp4 (899 kb)
das schöne an gifs ist, dass sie (weiterhin) überall funktionieren. andererseits funktionieren mp4s auch fast überall, ich kann sie bei bluesky hochladen und in den meisten mastodon cients werden sie auch bewegt angezeigt. aber trotzdem fand ich es (für mich) praktisch eine übersicht über meine verwendeten echten gifs zu haben.
und kein artikel über gifs, in dem ich nicht auf das nach wie vor grossartige, 2015 eingestellte IF WE DON'T, REMEMBER ME. (iwdrm), wo irgendwer mit viel geduld subtil bewegte einzelbilder animierte und als gifs veröffentlichte. ich bin nach wie vor ein sehr grosser fan dieser animationen.
mein workflow um „live fotos“ vom iphone hier zu posten geht übrigens so:
- live foto auf dem iphone zu einer „endlosschleife“ machen
- airdrop auf den laptop (kommt als mp4 an)
- mp4 in pixelmator öffnen und auf ca. 1000-1500 px breite skalieren
- optimiertes jpg als poster-bild speichern
- mp4 in pixelmator als optimiertes mp4 speichern (oder mit ffmpeg oder mediacms fürs web optimieren)
mit kirby baue ich dann ein figcaption-video-html konstrukt das in etwa so aussieht:
<figure class="video">
<a href="https://wirres.net/media/pages/articles/gifs/e4e8b3d576-1767369338/img_5687.mp4_1080_h264.mp4">
<video
class="videosrc"
height="480"
width="640"
autoplay loop muted playsinline
preload="metadata"
poster="https://wirres.net/media/pages/articles/gifs/e213b3af88-1767369369/img_5687-960x-q70.jpg"
title="">
<source
src="https://wirres.net/media/pages/articles/gifs/e4e8b3d576-1767369338/img_5687.mp4_1080_h264.mp4"
type="video/mp4">
</video>
</a>
<figcaption>mp4 (899 kb)</figcaption>
</figure>
@ix Darf ich eine technische Frage stellen? Das Skript zum Umwandeln in gif habe ich ausprobiert, funktioniert, nun hätte ich gerne noch die Option, max_colors für das Erzeugen der Palette auf einen Wert zu setzen. Ich bin völlig unerfahren bei ffmpeg, und kann vermuten, wo das hin muss, habe aber keine Ahnung von Filtergraph und Chains und der Syntax. Könntest du das noch ergänzen im Skript, oder hier die angepasste Zeile veröffentlichen? Wenn das einfach geht und nicht zu viel Arbeit macht.
@herr_rau das script habe ich cursor (oder gemini?) machen lassen. das kann ich gerne nochmal fragen.
@herr_rau nicht getestet, frisch aus dem LLM:
@ix Danke, ich probier's gleich aus! (Da OBEN hätte ich das gar nicht vermutet. Ich lerne noch. Und jetzt sehe ich erst das da UNTEN.)
@ix Funktioniert, und ich verstehe jetzt mehr, danke!