Причина этого, очевидно, в том, что каждый второй кадр в оригинальном gif-изображении пуст. Каждый пустой слой должен сливаться с предыдущим, а не заменять его, так же как ImageMagick позволяет с помощью команды dispose . Вы можете посмотреть на это ближе с Gimp.
Чтобы удалить пустые кадры, вы должны сделать это вручную или с помощью скрипта, например. разбить изображение на серию файлов, удалить каждый второй кадр и объединить их обратно в исходный GIF. Пример здесь.
Изменить: так как изображения GIF являются пользовательским вводом, я боюсь, что нет 100% уверенного способа автоматизировать это. Вы можете определить, является ли рамка пустой (содержит один цвет), но вы намеренно будете сокращать изображения gif, содержащие одноцветные рамки. Кроме того, могут быть одноцветные рамки, которые добавляют только частичное наложение.
Вот Баш скрипт Неочищенный удаления одиночных цветных кадров с использованием информации из ImageMagick идентифицировать команду.
#!/bin/bash
convert animation.gif +adjoin tmp_%04d.png
j=0
for i in $(ls tmp_*.png); do
if [ $(identify -verbose $i | grep Colors: | awk '{ print $2; }') != "1" ]; then
cp $i select_$(printf %04d $j).png;
(( j++ ))
fi
done
montage $(ls select_*) -tile x1 -geometry '1x1+0+0<' -alpha On -background 'rgba(0, 0, 0, 0.0)' -quality 100 result.png