Любой способ автоматического сжатия .gif-файла?

У меня есть 2.0 mb gif, я хочу сделать меньше, желательно, отбросив некоторые кадры.

Есть ли утилита командной строки или программа, которая сделает это для меня автоматически?

Спасибо.

11
задан 15 June 2011 в 10:31

36 ответов

Вы можете легко оптимизировать свой файл .gif на Gimp.

Просто сохранить как .gif, а затем сжать или сохранить в другом расширении как .jpeg или другое.

1
ответ дан 10 August 2018 в 09:35

Вы можете использовать Gimp , чтобы удалить некоторые кадры из GIF, а также повторно оптимизировать файл, снова вернув его в GIF.

6
ответ дан 10 August 2018 в 09:35

ImageOptim использует Gifsicle для сжатия Gif. Насколько я знаю, он работает достаточно хорошо (в наши дни я вообще не использую Gif). На своем сайте:

Оптимизируйте свои анимации! Это сохраняет только измененную часть каждого кадра и может радикально уменьшить ваши GIF. Вы также можете использовать прозрачность, чтобы сделать их еще меньше. Оптимизатор Gifsicle довольно мощный и обычно уменьшает анимацию до нескольких байтов лучших коммерческих оптимизаторов.

9
ответ дан 13 August 2018 в 15:46

Я использую 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 мс.

2
ответ дан 13 August 2018 в 15:46

Вы можете использовать Gimp , чтобы удалить некоторые кадры из GIF, а также повторно оптимизировать файл, снова вернув его в GIF.

6
ответ дан 13 August 2018 в 15:46
  • 1
    Как вы оптимизируете файл для сохранения в Gimp? – orschiro 13 October 2016 в 14:57

Вы можете легко оптимизировать свой файл .gif на Gimp.

Просто сохранить как .gif, а затем сжать или сохранить в другом расширении как .jpeg или другое.

1
ответ дан 13 August 2018 в 15:46

Другие вопросы по тегам:

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