У меня есть 2.0 mb gif, я хочу сделать меньше, желательно, отбросив некоторые кадры.
Есть ли утилита командной строки или программа, которая сделает это для меня автоматически?
Спасибо.
Вы можете легко оптимизировать свой файл .gif на Gimp.
Просто сохранить как .gif, а затем сжать или сохранить в другом расширении как .jpeg или другое.
Вы можете использовать Gimp , чтобы удалить некоторые кадры из GIF, а также повторно оптимизировать файл, снова вернув его в GIF.
ImageOptim использует Gifsicle для сжатия Gif. Насколько я знаю, он работает достаточно хорошо (в наши дни я вообще не использую Gif). На своем сайте:
Оптимизируйте свои анимации! Это сохраняет только измененную часть каждого кадра и может радикально уменьшить ваши GIF. Вы также можете использовать прозрачность, чтобы сделать их еще меньше. Оптимизатор Gifsicle довольно мощный и обычно уменьшает анимацию до нескольких байтов лучших коммерческих оптимизаторов.
blockquote>
Я использую ezgif.com/optimize , поскольку GIMP и другие инструменты не подходят для этой работы. Разница в том, что ezgif использует модификацию gifsicle
(с флагом lossy
), недоступным в версии apt
. См. Release 1.82.1 здесь (замените / usr / bin / gifsicle
на подходящую для вашей системы (двоичный код, заканчивающийся на -статический
) .
Мои заметки о полном рабочем процессе оптимизации gif здесь .
Редактировать: текущий скрипт, который хранится в нем, будет обновлен на GitHub здесь
Я не буду описывать, как я это делаю здесь, общая идея состоит в нескольких бах-функциях / алиасах:
function gifopt () {# args: $ input_file ($ loss_level), если [-z "$ 2"] затем # использовать значение по умолчанию 30 local loss_level = 30 elif [["$ 2" = ~ ^ [0-9] + $]] & amp; & amp; [" $ 2 "-ge 30 -a" $ 2 "-le 200] then local loss_level = $ 2 else echo" $ {2: - "Параметр уровня потерь должен быть целым числом от 30-200"} "1 & gt; & amp; 2 exit 1 fi local inputgif = "$ {1?) Отсутствует параметр входного файла '}" local gifname = "$ (basename $ inputgif .gif)" local basegifname = $ (echo "$ gifname" | sed' s / _reduced_x [0-9] // g ') local outputgif = "$ basegifname-opt.gif" gifsicle -O3 --lossy = "$ loss_level" -o "$ outputgif" "$ inputgif"; l ocal oldfilesize = $ (du -h $ inputgif | cut -f1) local newfilesize = $ (du -h $ outputgif | cut -f1) echo «Файл уменьшен с $ oldfilesize до $ newfilesize as $ outputgif»} function gifopt () {# args: $ input_file ($ loss_level), если [ -z "$ 2"], затем # использовать значение по умолчанию 30 loss_level = 30 elif [["$ 2" = ~ ^ [0-9] + $]] & amp; & amp; & amp; & amp; & amp; & amp; ["$ 2" -ge 30 -a "$ 2" -le 200] then loss_level = $ 2 else echo "$ {2: -" Параметр уровня потерь должен быть целым числом от 30-200 "}" 1 & amp; 2 exit 1 fi local inputgif = "$ {1? 'Отсутствует параметр входного файла'}" local gifname = "$ (basename $ inputgif .gif)" local basegifname = $ (echo "$ gifname" | sed 's / _reduced_x [0-9 ] // g ') local outputgif = "$ basegifname-opt.gif" gifsicle -O3 --lossy = "$ loss_level" -o "$ outputgif" "$ inputgif"; local oldfilesize = $ (du -h $ inputgif | cut -f1) local newfilesize = $ (du -h $ outputgif | cut -f1) echo «Файл сокращен от $ oldfilesize до $ newfilesize as $ outputgif»} function gifspeedchange () { # args: $ gif_path $ frame_delay (1 = 0,1s) local orig_gif = "$ {1? 'Отсутствует параметр имени файла GIF'}" local frame_delay = $ {2? 'Отсутствует параметр задержки кадра'} gifsicle --batch --delay $ frame_delay $ orig_gif local newframerate = $ (echo "$ frame_delay * 10" | bc) echo "новая частота кадров GIF: $ newframerate ms"}
- lossy [ ! d10] принимает целое число от 30 до 200, поэтому для лучшего качества:
gifsicle -O3 --lossy = 30 -o output.gif input.gif
С помощью указанной функции gifopt
вы можете упростить ситуацию, поскольку по умолчанию она равна 30
gifopt input.gif
] ... выход будет автоматически называться input-opt.gif
. Вы можете изменить функцию, чтобы использовать флаг - batch
для редактирования на месте, но я бы не рекомендовал перезаписывать ваш исходный материал.
Эта функция также работает для удаления любых _reduced_x
, добавленный функцией уменьшения числа кадров, т. е. вы могли бы иметь промежуточный файл input_reduced_x2.gif
(шаг, который ~ уменьшил бы размер файла, отбросив каждый другой кадр). [ ! d26]
Если вы сделали это, скорость может измениться, исправлена с помощью gifspeedchange input-opt.gif 5
, например, для использования задержки кадра 50 мс.
Вы можете использовать Gimp , чтобы удалить некоторые кадры из GIF, а также повторно оптимизировать файл, снова вернув его в GIF.
Вы можете легко оптимизировать свой файл .gif на Gimp.
Просто сохранить как .gif, а затем сжать или сохранить в другом расширении как .jpeg или другое.