Hoy me sorprendió descubrir lo difícil que es pasar de un webp
animación a gif
animación. Mi GIMP 2.8.22
y ImageMagick 7.0.7-21
en linux 4.14.13-1-ARCH
no parecen admitir el formato, y la única herramienta disponible en repositorios parece ser libwebp 0.4.1
que incluye una herramienta de decodificación que le permite extraer cuadros individuales a algunos formatos de imagen, ninguno de ellos es gif (¿Quizás sea un problema de licencia?)
De todos modos, utilicé el siguiente script:
#!/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
Lo que crea una animación gif a partir de los fotogramas extraídos del archivo proporcionado en el primer argumento.
Lo probé en este archivo y el archivo resultante fue un poco defectuoso. ¿Es correcto publicar en este foro sugerencias de mejora del procedimiento/invocaciones?
Y:si hay herramientas personalizadas para esta conversión, ¡comparta sus conocimientos! 🙂
Respuesta aceptada:
Su secuencia de comandos funciona bien, pero necesita rellenar con cero los nombres de los cuadros individuales; de lo contrario, crea el gif con marcos en un orden desordenado. Lo arreglé y lo probé en algunas animaciones giphy webp (incluido tu ejemplo) y el resultado es lo que esperas.
A continuación se muestra solo su secuencia de comandos con dos cambios. Primero, un for
alterado bucle para rellenar con cero esos nombres de archivo de marco. En segundo lugar, agregué otra verificación webpinfo para capturar la duración del marco y usar eso (si> 0) para DEMORA (suponiendo ingenuamente que las personas no están usando duraciones de marco variables):
#!/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