GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Webp-Animation zu GIF-Animation (cli)?

Ich war heute überrascht festzustellen, wie schwierig es ist, von einem webp zu gehen Animation zu gif Animation. Mein GIMP 2.8.22 und ImageMagick 7.0.7-21 auf linux 4.14.13-1-ARCH scheinen das Format nicht zu unterstützen, und das einzige in Repos verfügbare Tool scheint libwebp 0.4.1 zu sein das ein Dekodierungstool enthält, mit dem Sie einzelne Frames in einige Bildformate extrahieren können, von denen keines GIF ist (vielleicht ein Lizenzproblem?)

Wie auch immer, ich habe das folgende Skript verwendet:

#!/bin/bash

DELAY=${DELAY:-10}
LOOP=${LOOP:-0}
r=`realpath $1`
d=`dirname $r`
pushd $d > /dev/null
f=`basename $r`
n=`webpinfo -summary $f | grep frames | sed -e 's/.* ([0-9]*)$/1/'`
pfx=`echo -n $f | sed -e 's/^(.*).webp$/1/'`
if [ -z $pfx ]; then
    pfx=$f
fi

echo "converting $n frames from $f 
working dir $d
file stem '$pfx'"

for ((i=0; i<$n; i++)); do
    webpmux -get frame $i $f -o $pfx.$i.webp
    dwebp $pfx.$i.webp -o $pfx.$i.png
done

convert $pfx.*.png -delay $DELAY -loop $LOOP $pfx.gif
rm $pfx.[0-9]*.png $pfx.[0-9]*.webp
popd > /dev/null

Dadurch wird eine GIF-Animation aus den extrahierten Frames der im ersten Argument angegebenen Datei erstellt.

Ich habe es mit dieser Datei versucht und die resultierende Datei war eine Art Artefakt. Ist es die richtige Form, in diesem Forum Vorschläge zur Verbesserung des Verfahrens/der Aufrufe zu posten?

Und:Wenn es für diese Konvertierung eigene Tools gibt, teilen Sie bitte Ihr Wissen! 🙂

Akzeptierte Antwort:

Ihr Skript funktioniert einwandfrei, aber Sie müssen Ihre einzelnen Frame-Namen mit Nullen auffüllen. Andernfalls wird das GIF mit Rahmen in einer durcheinandergebrachten Reihenfolge erstellt. Ich habe das behoben und an ein paar Giphy-Webp-Animationen (einschließlich Ihres Beispiels) ausprobiert, und die Ausgabe entspricht Ihren Erwartungen.

Unten ist nur Ihr Skript mit zwei Änderungen. Zuerst ein veränderter for Schleife, um diese Frame-Dateinamen mit Nullen aufzufüllen. Zweitens habe ich einen weiteren Webpinfo-Check hinzugefügt, um die Frame-Dauer zu erfassen und diese (wenn> 0) für DELAY zu verwenden (in der naiven Annahme, dass die Leute keine variablen Frame-Dauern verwenden):

#!/bin/bash

DELAY=${DELAY:-10}
LOOP=${LOOP:-0}
r=`realpath $1`
d=`dirname $r`
pushd $d > /dev/null
f=`basename $r`
n=`webpinfo -summary $f | grep frames | sed -e 's/.* ([0-9]*)$/1/'`
dur=`webpinfo -summary $f | grep Duration | head -1 |  sed -e 's/.* ([0-9]*)$/1/'`

if (( $dur > 0 )); then
    DELAY = dur
fi

pfx=`echo -n $f | sed -e 's/^(.*).webp$/1/'`
if [ -z $pfx ]; then
    pfx=$f
fi

echo "converting $n frames from $f 
working dir $d
file stem '$pfx'"

for i in $(seq -f "%05g" 1 $n)
do
    webpmux -get frame $i $f -o $pfx.$i.webp
    dwebp $pfx.$i.webp -o $pfx.$i.png
done

convert $pfx.*.png -delay $DELAY -loop $LOOP $pfx.gif
rm $pfx.[0-9]*.png $pfx.[0-9]*.webp
popd > /dev/null

Linux
  1. Installieren Sie Pencil2D Animation auf Ubuntu 20.04 LTS

  2. Linux – Sind verschiedene Linux/Unix-Kernel austauschbar?

  3. Wie konvertiert man einen Png-Streifen in ein GIF?

  4. Tidal CLI Client – ​​Streamen Sie Tidal-Musik von der Linux-Befehlszeile

  5. Konvertieren Sie Webp-Bilder per Linux-Befehl in PNG

So überprüfen Sie die Internetgeschwindigkeit unter Linux mit Speedtest CLI

So konvertieren Sie Videos in GIF unter Linux [Terminal- und GUI-Methoden]

7 Möglichkeiten, die Netzwerkgeschwindigkeit in Linux mit Browser und CLI zu überprüfen

So installieren und verwenden Sie WP CLI unter Linux

So installieren und konfigurieren Sie Angular CLI auf Linux-Distributionen

So deaktivieren Sie WiFi auf einem Linux-System:GUI- und CLI-Methoden