Saya terkejut hari ini karena ternyata betapa sulitnya beralih dari webp
animasi ke gif
animasi. GIMP 2.8.22
saya dan ImageMagick 7.0.7-21
di linux 4.14.13-1-ARCH
sepertinya tidak mendukung format, dan satu-satunya alat yang tersedia di repo adalah libwebp 0.4.1
yang menyertakan alat dekode yang memungkinkan Anda mengekstrak bingkai individual ke beberapa format gambar, tidak ada yang berupa gif (Mungkin ini masalah lisensi?)
Bagaimanapun, saya menggunakan skrip berikut:
#!/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
Yang membuat animasi gif dari bingkai yang diekstraksi dari file yang disediakan dalam argumen pertama.
Saya mencobanya pada file ini dan file yang dihasilkan adalah jenis artefak. Apakah formulir yang tepat untuk diposting di forum ini untuk saran perbaikan prosedur/permohonan?
Dan:Jika ada alat khusus untuk konversi ini, silakan bagikan pengetahuan Anda!
Jawaban yang Diterima:
Skrip Anda berfungsi dengan baik, tetapi Anda perlu memberi nol pada nama bingkai individual Anda; jika tidak, itu akan membuat gif dengan bingkai dalam urutan yang campur aduk. Saya memperbaikinya dan mencobanya pada beberapa animasi webp giphy (termasuk contoh Anda) dan hasilnya sesuai dengan yang Anda harapkan.
Di bawah ini hanya skrip Anda dengan dua perubahan. Pertama, for
altered yang diubah loop ke nol pad nama file bingkai itu. Kedua, saya menambahkan cek webpinfo lain untuk mengambil durasi bingkai dan menggunakannya (jika> 0) untuk DELAY (secara naif berasumsi bahwa orang tidak menggunakan durasi bingkai variabel):
#!/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