webp-анимация в gif-анимация (cli)

Есть ли у вас компьютер, подключенный к google.com (это 216.58.220.206 с моего сайта) с 1 переходом?

Пакеты ARP отправляются как широковещательная передача Ethernet в сегмент локальной сети, поэтому вы можете использовать arping для проверки соседних хостов в той же сети. Вместо google.com попробуйте использовать адрес шлюза по умолчанию для подсети wlan0 .

6
26.01.2018, 18:32
3 ответа

Habría usado ffmpegpara esta tarea. Echa un vistazo a este hilo que debería darte buenos resultados.

Probé con el mp4 del gif de giphy y como resultado obtuve este gif a continuación, ¡que se ve bastante bien en mi opinión!

mkdir frames
ffmpeg -i giphy.mp4 -vf scale=320:-1:flags=lanczos,fps=10 frames/ffout%03d.png
convert -loop 0 frames/ffout*.png output.gif

enter image description here

7
27.01.2020, 20:28

Ваш сценарий работает просто отлично, но вам нужно дополнить нулями имена отдельных кадров; в противном случае он создает gif с кадрами в беспорядке. Я исправил это и попробовал на нескольких анимациях giphy webp (, включая ваш пример ), и результат оказался таким, как вы и ожидали.

Ниже приведен только ваш сценарий с двумя изменениями. Во-первых, измененный цикл forдля заполнения нулями этих имен файлов кадров. Во-вторых, я добавил еще одну проверку webpinfo, чтобы получить продолжительность кадра и использовать это (, если > 0 )для ЗАДЕРЖКИ (, наивно предполагая, что люди не используют переменную продолжительность кадра ):

.
#!/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
8
27.01.2020, 20:28

Столкнувшись с той же проблемой, я обнаружил, что использование Python и его библиотеки Pillow может быть самым простым способом. Просто импортируйте его, дайте ему загрузить файл изображения и снова сохраните его с соответствующими параметрами.

from PIL import Image
im = Image.open('your_file.webp')
im.save('your_file.gif', 'gif', save_all=True, optimize=True, background=0)

Протестировано с Python 3.8 и Pillow 8.0.1. Возможно, вам придется сначала установить или обновить библиотеку, используя, например,.python3 -m pip install --user --upgrade Pillow

Все в одну строку для пакетного преобразования всех *.webpфайлов в текущей папке в *.gifс тем же именем:

for f in *.webp;do echo "$f";python3 -c "from PIL import Image;Image.open('$f').save('${f%.webp}.gif','gif',save_all=True,optimize=True,background=0)";done

Примечание :Этот ответ был вдохновлен Stack Overflow .

8
13.12.2020, 15:05

Теги

Похожие вопросы