.gifファイルを自動的に圧縮する方法はありますか?


11

できればいくつかのフレームをドロップすることで小さくしたい2.0 mb gifがあります。

コマンドラインユーティリティまたはそれを自動的に実行するプログラムはありますか?

ありがとう。


webm形式を調べてください。これは、より最適化されたgifのようなものです。

回答:


8

ImageOptimは使用していますGifsicleをそのGIFの圧縮のために。私の知る限り、それは非常にうまく機能します(私は最近Gifを使用しません)。彼らのサイトから:

アニメーションを最適化してください!これにより、各フレームの変更部分のみが保存され、GIFを大幅に縮小できます。透明度を使用してさらに小さくすることもできます。Gifsicleのオプティマイザーは非常に強力であり、通常、最高の商用オプティマイザーの数バイト以内にアニメーションを減らします。


6

Gimpgimpをインストールするを使用し、GIFからいくつかのフレームを削除したり、再度GIFに保存してファイルを再最適化したりできます。


Gimpでの保存時にファイルをどのように再最適化しますか?
-orschiro

2

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のフレーム遅延を使用するように修正され、速度が変化する場合があります。


1

Gimp上の.gifファイルを簡単に最適化できます。

.gifとして保存してから圧縮するか、または.jpegなどとして他の拡張子で保存できます。


1
Gimpではどのように圧縮しますか?
-orschiro
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.