---
title: gifs
date: "2026-01-02T18:00:00+01:00"
url: "https://wirres.net/articles/gifs"
tags: [gifs, mp4, videos, live fotos, aus dem maschinenraum, howto]
category: über wirres
additional_categories: [wirres.net]
author: felix schwenzel
---

# 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**](https://wirres.net/gifs)

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):

```sh
#!/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)](https://wirres.net/cache/md-localvideo-thumbs/articles-gifs-articles-gifs-img_5687-jpg-gen.jpg)](https://wirres.net/media/pages/articles/gifs/e4e8b3d576-1767369338/img_5687.mp4_1080_h264.mp4)

<figure>
    <img src="/@/file/6aki3gtclcigxata"
         alt="schnee gif">
    <figcaption>gif (5 mb)</figcaption>
</figure>

das schöne an *gifs* ist, dass sie (weiterhin) überall funktionieren. andererseits funktionieren *mp4s* auch fast überall, ich kann sie bei [bluesky hochladen](https://bsky.app/profile/wirres.net/post/3mbbr4zb5ck2k) und in den meisten [mastodon cients](https://norden.social/@ix@wirres.net/115813917348900443) werden sie auch bewegt angezeigt. aber trotzdem fand ich es (für mich) praktisch [eine übersicht](https://wirres.net/gifs) ü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.*](https://iwdrm.tumblr.com/) (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:

```html
<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>
```
