У меня есть 2.0 mb gif, я хочу сделать меньше, желательно, отбросив некоторые кадры.
Есть ли утилита командной строки или программа, которая сделает это для меня автоматически?
Спасибо.
Вы можете использовать Gimp для удаления некоторых кадров из GIF, а также для повторной оптимизации файла, снова сохраняя его обратно в GIF.
Вы можете легко оптимизировать свой файл .gif на Gimp.
Просто сохранить как .gif, а затем сжать или сохранить в другом расширении как .jpeg или другое.
Я использую 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 мс.
ImageOptim использует Gifsicle для сжатия Gif. Насколько я знаю, он работает достаточно хорошо (в наши дни я вообще не использую Gif). На своем сайте:
Оптимизируйте свои анимации! Это сохраняет только измененную часть каждого кадра и может радикально уменьшить ваши GIF. Вы также можете использовать прозрачность, чтобы сделать их еще меньше. Оптимизатор Gifsicle довольно мощный и обычно уменьшает анимацию до нескольких байтов лучших коммерческих оптимизаторов.Вы можете использовать Gimp для удаления некоторых кадров из GIF, а также для повторной оптимизации файла, снова сохраняя его обратно в GIF.
Вы можете легко оптимизировать свой файл .gif на Gimp.
Просто сохранить как .gif, а затем сжать или сохранить в другом расширении как .jpeg или другое.
Я использую 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 мс.
ImageOptim использует Gifsicle для сжатия Gif. Насколько я знаю, он работает достаточно хорошо (в наши дни я вообще не использую Gif). На своем сайте:
Оптимизируйте свои анимации! Это сохраняет только измененную часть каждого кадра и может радикально уменьшить ваши GIF. Вы также можете использовать прозрачность, чтобы сделать их еще меньше. Оптимизатор Gifsicle довольно мощный и обычно уменьшает анимацию до нескольких байтов лучших коммерческих оптимизаторов.Вы можете использовать Gimp для удаления некоторых кадров из GIF, а также для повторной оптимизации файла, снова сохраняя его обратно в GIF.
Вы можете легко оптимизировать свой файл .gif на Gimp.
Просто сохранить как .gif, а затем сжать или сохранить в другом расширении как .jpeg или другое.
Я использую 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 мс.
ImageOptim использует Gifsicle для сжатия Gif. Насколько я знаю, он работает достаточно хорошо (в наши дни я вообще не использую Gif). На своем сайте:
Оптимизируйте свои анимации! Это сохраняет только измененную часть каждого кадра и может радикально уменьшить ваши GIF. Вы также можете использовать прозрачность, чтобы сделать их еще меньше. Оптимизатор Gifsicle довольно мощный и обычно уменьшает анимацию до нескольких байтов лучших коммерческих оптимизаторов.Вы можете использовать Gimp для удаления некоторых кадров из GIF, а также для повторной оптимизации файла, снова сохраняя его обратно в GIF.
Вы можете легко оптимизировать свой файл .gif на Gimp.
Просто сохранить как .gif, а затем сжать или сохранить в другом расширении как .jpeg или другое.
Я использую 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 мс.
ImageOptim использует Gifsicle для сжатия Gif. Насколько я знаю, он работает достаточно хорошо (в наши дни я вообще не использую Gif). На своем сайте:
Оптимизируйте свои анимации! Это сохраняет только измененную часть каждого кадра и может радикально уменьшить ваши GIF. Вы также можете использовать прозрачность, чтобы сделать их еще меньше. Оптимизатор Gifsicle довольно мощный и обычно уменьшает анимацию до нескольких байтов лучших коммерческих оптимизаторов.Вы можете использовать Gimp для удаления некоторых кадров из GIF, а также для повторной оптимизации файла, снова сохраняя его обратно в GIF.
Вы можете легко оптимизировать свой файл .gif на Gimp.
Просто сохранить как .gif, а затем сжать или сохранить в другом расширении как .jpeg или другое.
Я использую 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 мс.
ImageOptim использует Gifsicle для сжатия Gif. Насколько я знаю, он работает достаточно хорошо (в наши дни я вообще не использую Gif). На своем сайте:
Оптимизируйте свои анимации! Это сохраняет только измененную часть каждого кадра и может радикально уменьшить ваши GIF. Вы также можете использовать прозрачность, чтобы сделать их еще меньше. Оптимизатор Gifsicle довольно мощный и обычно уменьшает анимацию до нескольких байтов лучших коммерческих оптимизаторов.Вы можете использовать Gimp для удаления некоторых кадров из GIF, а также для повторной оптимизации файла, снова сохраняя его обратно в GIF.
Вы можете легко оптимизировать свой файл .gif на Gimp.
Просто сохранить как .gif, а затем сжать или сохранить в другом расширении как .jpeg или другое.
Я использую 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 мс.
ImageOptim использует Gifsicle для сжатия Gif. Насколько я знаю, он работает достаточно хорошо (в наши дни я вообще не использую Gif). На своем сайте:
Оптимизируйте свои анимации! Это сохраняет только измененную часть каждого кадра и может радикально уменьшить ваши GIF. Вы также можете использовать прозрачность, чтобы сделать их еще меньше. Оптимизатор Gifsicle довольно мощный и обычно уменьшает анимацию до нескольких байтов лучших коммерческих оптимизаторов.Вы можете использовать Gimp для удаления некоторых кадров из GIF, а также для повторной оптимизации файла, снова сохраняя его обратно в GIF.
Вы можете легко оптимизировать свой файл .gif на Gimp.
Просто сохранить как .gif, а затем сжать или сохранить в другом расширении как .jpeg или другое.
Я использую 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 мс.
ImageOptim использует Gifsicle для сжатия Gif. Насколько я знаю, он работает достаточно хорошо (в наши дни я вообще не использую Gif). На своем сайте:
Оптимизируйте свои анимации! Это сохраняет только измененную часть каждого кадра и может радикально уменьшить ваши GIF. Вы также можете использовать прозрачность, чтобы сделать их еще меньше. Оптимизатор Gifsicle довольно мощный и обычно уменьшает анимацию до нескольких байтов лучших коммерческих оптимизаторов.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 мс.