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

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

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

Спасибо.

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

36 ответов

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

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

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

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

1
ответ дан 25 July 2018 в 21:43

Я использую ezgif.com/optimize, поскольку GIMP и другие инструменты не подходят для этой работы. Разница в том, что ezgif использует модификацию gifsicle (с флагом lossy), недоступную в версии apt. См. Раздел 1.82.1 здесь (замените /usr/bin/gifsicle на подходящий для вашей системы (двоичный код, заканчивающийся на -static).

Мои заметки о полном рабочем процессе оптимизации gif - ezgif.com /optimize.

Изменить: текущий скрипт, который будет использоваться, будет обновлен на GitHub здесь

Я не буду описывать, как я все это делаю, общая идея это несколько функций bash / aliases:

function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 local loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then local loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifspeedchange() { # args: $gif_path $frame_delay (1 = 0.1s) local orig_gif="${1?'Missing GIF filename parameter'}" local frame_delay=${2?'Missing frame delay parameter'} gifsicle --batch --delay $frame_delay $orig_gif local newframerate=$(echo "$frame_delay*10" | bc) echo "new GIF frame rate: $newframerate ms" }

Флаг --lossy принимает целое число от 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 (шаг, который ~ уменьшит вдвое размер файла, отбросив каждый другой кадр).

Если вы сделали это на скорости может измениться, например, с gifspeedchange input-opt.gif 5, чтобы использовать задержку кадра 50 мс.

2
ответ дан 25 July 2018 в 21:43

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

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

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

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

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

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

1
ответ дан 31 July 2018 в 10:55

Я использую ezgif.com/optimize, поскольку GIMP и другие инструменты не подходят для этой работы. Разница в том, что ezgif использует модификацию gifsicle (с флагом lossy), недоступную в версии apt. См. Раздел 1.82.1 здесь (замените /usr/bin/gifsicle на подходящий для вашей системы (двоичный код, заканчивающийся на -static).

Мои заметки о полном рабочем процессе оптимизации gif - ezgif.com /optimize.

Изменить: текущий скрипт, который будет использоваться, будет обновлен на GitHub здесь

Я не буду описывать, как я все это делаю, общая идея это несколько функций bash / aliases:

function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 local loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then local loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifspeedchange() { # args: $gif_path $frame_delay (1 = 0.1s) local orig_gif="${1?'Missing GIF filename parameter'}" local frame_delay=${2?'Missing frame delay parameter'} gifsicle --batch --delay $frame_delay $orig_gif local newframerate=$(echo "$frame_delay*10" | bc) echo "new GIF frame rate: $newframerate ms" }

Флаг --lossy принимает целое число от 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 (шаг, который ~ уменьшит вдвое размер файла, отбросив каждый другой кадр).

Если вы сделали это на скорости может измениться, например, с gifspeedchange input-opt.gif 5, чтобы использовать задержку кадра 50 мс.

2
ответ дан 31 July 2018 в 10:55

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

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

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

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

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

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

1
ответ дан 31 July 2018 в 11:54

Я использую ezgif.com/optimize, поскольку GIMP и другие инструменты не подходят для этой работы. Разница в том, что ezgif использует модификацию gifsicle (с флагом lossy), недоступную в версии apt. См. Раздел 1.82.1 здесь (замените /usr/bin/gifsicle на подходящий для вашей системы (двоичный код, заканчивающийся на -static).

Мои заметки о полном рабочем процессе оптимизации gif - ezgif.com /optimize.

Изменить: текущий скрипт, который будет использоваться, будет обновлен на GitHub здесь

Я не буду описывать, как я все это делаю, общая идея это несколько функций bash / aliases:

function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 local loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then local loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifspeedchange() { # args: $gif_path $frame_delay (1 = 0.1s) local orig_gif="${1?'Missing GIF filename parameter'}" local frame_delay=${2?'Missing frame delay parameter'} gifsicle --batch --delay $frame_delay $orig_gif local newframerate=$(echo "$frame_delay*10" | bc) echo "new GIF frame rate: $newframerate ms" }

Флаг --lossy принимает целое число от 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 (шаг, который ~ уменьшит вдвое размер файла, отбросив каждый другой кадр).

Если вы сделали это на скорости может измениться, например, с gifspeedchange input-opt.gif 5, чтобы использовать задержку кадра 50 мс.

2
ответ дан 31 July 2018 в 11:54

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

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

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

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

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

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

1
ответ дан 2 August 2018 в 03:19

Я использую ezgif.com/optimize, поскольку GIMP и другие инструменты не подходят для этой работы. Разница в том, что ezgif использует модификацию gifsicle (с флагом lossy), недоступную в версии apt. См. Раздел 1.82.1 здесь (замените /usr/bin/gifsicle на подходящий для вашей системы (двоичный код, заканчивающийся на -static).

Мои заметки о полном рабочем процессе оптимизации gif - ezgif.com /optimize.

Изменить: текущий скрипт, который будет использоваться, будет обновлен на GitHub здесь

Я не буду описывать, как я все это делаю, общая идея это несколько функций bash / aliases:

function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 local loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then local loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifspeedchange() { # args: $gif_path $frame_delay (1 = 0.1s) local orig_gif="${1?'Missing GIF filename parameter'}" local frame_delay=${2?'Missing frame delay parameter'} gifsicle --batch --delay $frame_delay $orig_gif local newframerate=$(echo "$frame_delay*10" | bc) echo "new GIF frame rate: $newframerate ms" }

Флаг --lossy принимает целое число от 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 (шаг, который ~ уменьшит вдвое размер файла, отбросив каждый другой кадр).

Если вы сделали это на скорости может измениться, например, с gifspeedchange input-opt.gif 5, чтобы использовать задержку кадра 50 мс.

2
ответ дан 2 August 2018 в 03:19

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

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

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

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

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

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

1
ответ дан 4 August 2018 в 19:16

Я использую ezgif.com/optimize, поскольку GIMP и другие инструменты не подходят для этой работы. Разница в том, что ezgif использует модификацию gifsicle (с флагом lossy), недоступную в версии apt. См. Раздел 1.82.1 здесь (замените /usr/bin/gifsicle на подходящий для вашей системы (двоичный код, заканчивающийся на -static).

Мои заметки о полном рабочем процессе оптимизации gif - ezgif.com /optimize.

Изменить: текущий скрипт, который будет использоваться, будет обновлен на GitHub здесь

Я не буду описывать, как я все это делаю, общая идея это несколько функций bash / aliases:

function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 local loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then local loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifspeedchange() { # args: $gif_path $frame_delay (1 = 0.1s) local orig_gif="${1?'Missing GIF filename parameter'}" local frame_delay=${2?'Missing frame delay parameter'} gifsicle --batch --delay $frame_delay $orig_gif local newframerate=$(echo "$frame_delay*10" | bc) echo "new GIF frame rate: $newframerate ms" }

Флаг --lossy принимает целое число от 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 (шаг, который ~ уменьшит вдвое размер файла, отбросив каждый другой кадр).

Если вы сделали это на скорости может измениться, например, с gifspeedchange input-opt.gif 5, чтобы использовать задержку кадра 50 мс.

2
ответ дан 4 August 2018 в 19:16

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

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

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

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

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

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

1
ответ дан 6 August 2018 в 03:30

Я использую ezgif.com/optimize, поскольку GIMP и другие инструменты не подходят для этой работы. Разница в том, что ezgif использует модификацию gifsicle (с флагом lossy), недоступную в версии apt. См. Раздел 1.82.1 здесь (замените /usr/bin/gifsicle на подходящий для вашей системы (двоичный код, заканчивающийся на -static).

Мои заметки о полном рабочем процессе оптимизации gif - ezgif.com /optimize.

Изменить: текущий скрипт, который будет использоваться, будет обновлен на GitHub здесь

Я не буду описывать, как я все это делаю, общая идея это несколько функций bash / aliases:

function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 local loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then local loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifspeedchange() { # args: $gif_path $frame_delay (1 = 0.1s) local orig_gif="${1?'Missing GIF filename parameter'}" local frame_delay=${2?'Missing frame delay parameter'} gifsicle --batch --delay $frame_delay $orig_gif local newframerate=$(echo "$frame_delay*10" | bc) echo "new GIF frame rate: $newframerate ms" }

Флаг --lossy принимает целое число от 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 (шаг, который ~ уменьшит вдвое размер файла, отбросив каждый другой кадр).

Если вы сделали это на скорости может измениться, например, с gifspeedchange input-opt.gif 5, чтобы использовать задержку кадра 50 мс.

2
ответ дан 6 August 2018 в 03:30

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

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

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

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

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

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

1
ответ дан 7 August 2018 в 21:17

Я использую ezgif.com/optimize, поскольку GIMP и другие инструменты не подходят для этой работы. Разница в том, что ezgif использует модификацию gifsicle (с флагом lossy), недоступную в версии apt. См. Раздел 1.82.1 здесь (замените /usr/bin/gifsicle на подходящий для вашей системы (двоичный код, заканчивающийся на -static).

Мои заметки о полном рабочем процессе оптимизации gif - ezgif.com /optimize.

Изменить: текущий скрипт, который будет использоваться, будет обновлен на GitHub здесь

Я не буду описывать, как я все это делаю, общая идея это несколько функций bash / aliases:

function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 local loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then local loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifopt() { # args: $input_file ($loss_level) if [ -z "$2" ] then # use default of 30 loss_level=30 elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ] then loss_level=$2 else echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2 exit 1 fi local inputgif="${1?'Missing input file parameter'}" 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 "File reduced from $oldfilesize to $newfilesize as $outputgif" } function gifspeedchange() { # args: $gif_path $frame_delay (1 = 0.1s) local orig_gif="${1?'Missing GIF filename parameter'}" local frame_delay=${2?'Missing frame delay parameter'} gifsicle --batch --delay $frame_delay $orig_gif local newframerate=$(echo "$frame_delay*10" | bc) echo "new GIF frame rate: $newframerate ms" }

Флаг --lossy принимает целое число от 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 (шаг, который ~ уменьшит вдвое размер файла, отбросив каждый другой кадр).

Если вы сделали это на скорости может измениться, например, с gifspeedchange input-opt.gif 5, чтобы использовать задержку кадра 50 мс.

2
ответ дан 7 August 2018 в 21:17

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

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

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

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

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

Я использую 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
ответ дан 10 August 2018 в 09:35

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

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