GNU/Linux >> Znalost Linux >  >> Linux

Linux – Webp Animation To Gif Animation (cli)?

Dnes mě překvapilo, že jsem zjevně zjistil, jak obtížné je přejít z webp animace do gif animace. Můj GIMP 2.8.22 a ImageMagick 7.0.7-21 na linux 4.14.13-1-ARCH zdá se, že formát nepodporují a zdá se, že jediným nástrojem dostupným v repozitářích je libwebp 0.4.1 který obsahuje dekódovací nástroj, který vám umožní extrahovat jednotlivé snímky do některých obrazových formátů, přičemž žádný z nich není gif (možná je to problém s licencí?)

Každopádně jsem použil následující skript:

#!/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

Což vytvoří animaci gif z extrahovaných snímků souboru dodaného v prvním argumentu.

Zkoušel jsem to na tomto souboru a výsledný soubor byl tak trochu umělý. Je správná forma zveřejňovat na tomto fóru návrhy na zlepšení procedury/vyvolání?

A:Pokud existují vlastní nástroje pro tuto konverzi, podělte se o své znalosti! 🙂

Přijatá odpověď:

Váš skript funguje dobře, ale musíte vynulovat názvy jednotlivých snímků; jinak vytvoří gif s rámečky v neuspořádaném pořadí. Opravil jsem to a vyzkoušel jsem to na několika animacích giphy webp (včetně vašeho příkladu) a výstup je takový, jaký byste očekávali.

Níže je pouze váš skript se dvěma změnami. Nejprve pozměněný for smyčka na nulový blok ty názvy souborů snímků. Za druhé jsem přidal další kontrolu webpinfo, abych uchopil dobu trvání snímku a použil ji (pokud> 0) pro DELAY (naivně za předpokladu, že lidé nepoužívají proměnnou dobu trvání snímků):

#!/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. Jak převést pás Png na GIF?

  2. Klient Tidal CLI – Streamujte hudbu Tidal z příkazového řádku Linuxu

  3. Převeďte obrázky Webp na PNG pomocí příkazu Linux

  1. Nainstalujte Pencil2D Animation na Ubuntu 20.04 LTS

  2. Linux – Jsou různá jádra Linux/unix zaměnitelná?

  3. Jak nakonfigurovat PHP CLI na linux ubuntu, aby běželo jako www-data?

  1. Peek – Jednoduchý animovaný Gif Screen Recorder pro Linux

  2. CLI prohlížeč pdf pro linux

  3. Linux - změňte název hostitele v CLI