回答:
GIMPやその他のツールはこの仕事には向いていないので、私はezgif.com/optimizeを使用します。違いは、ezgifはバージョンでは使用できないgifsicle
変更(lossy
フラグ付き)を使用することapt
です。こちらのリリース1.82.1をご覧ください(/usr/bin/gifsicle
お使いのシステムに適したものに置き換えてください(バイナリで終わる-static
)。
完全なgif最適化ワークフローに関するメモはこちらにあります。
編集:現在使用中のスクリプトは、GitHub で更新されます。
ここではすべての方法を説明しませんが、一般的な考え方はいくつかのbash関数/エイリアスです:
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
(1つおきのフレームを削除することでファイルサイズを半分にするステップ)を作成できます。
そのようにするとgifspeedchange input-opt.gif 5
、たとえば50msのフレーム遅延を使用するように修正され、速度が変化する場合があります。