ImageMagickを使用してアニメーションGIFファイルのサイズを変更するにはどうすればよいですか?


46

このようなアニメーションGIFファイルのサイズを変更したいdo.gif ここに画像の説明を入力してください

行うconvert do.gif -resize 24x24\! do-24.gifと、do-24.gifでサイズ変更されますが、アニメーション化されません。ここに画像の説明を入力してください

同じアニメーションを取得する正しい方法でサイズを変更する方法は?

回答:


56

ファーストラン:

convert do.gif -coalesce temporary.gif

それから

convert -size <original size> temporary.gif -resize 24x24 smaller.gif

2
-coalesce「各ポイントでアニメーションの完全なビューを作成します。アニメーションシーケンスではなく、実際のフィルムストリップのようなものです。CoalescedAnimationとして知られるこのようなシーケンスは、研究、編集、修正、再最適化がはるかに簡単です」
サム

28
gifsicle --resize 24x24 > do-24.gifこれもできます
サム

2
合体されたビューは最適化されたビューよりもはるかに大きく(テストでは3.2倍)、サイズを変更すると合体したイメージが生成されます。これは解像度でも元のファイルサイズ(テストでは2.3倍)小さいです。直接サイズを変更しようとすると、見た目が良く、ファイルサイズが小さくなりますが、この画像でうまく機能するかもしれません。
エンドリス14

1
gifsicleは、ユースケースに合わせてはるかに優れた最適化された出力を生成しました。ありがとう@sam!
sj26

4
convert temporary.gif -resize 24x24 small.gifは、入力サイズを指定せずに機能します。
AMB

3

-coalesce + -deconstruct

後に-coalesce、あなたはおそらく追加したい-deconstruct

convert in.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif

この問題の根本的な原因は、入力GIFが適切に最小化されたことです。GIFを使用すると、次のフレームを、オフセットされた前のフレームから変更された長方形にすることができます。

-coalesce次に、すべてのフレームを元のサイズに拡大します。これにより、サイズ変更が機能しますが、入力画像としてフレームが再び圧縮されることはありません-deconstruct

この回答のテストデータを使用して:静止画像からアニメーションGIFを作成する方法(できればコマンドラインを使用)?これを次のように明確に見ることができますidentify

$ identify out-convert.gif | head -n 3
out-convert.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.020u 0:00.019
out-convert.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019
out-convert.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019

$ convert out-convert.gif -resize 256x out.gif
$ identify out.gif | head -n 3
out.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[1] GIF 256x256 256x256+125+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[2] GIF 256x258 256x256+123+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009

$ convert out-convert.gif -coalesce -resize 256x out-coalesce.gif
$ identify out-coalesce.gif | head -n 3
out-coalesce.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[1] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[2] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009

$ convert out-convert.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
$ identify out-deconstruct.gif | head -n 3
out-deconstruct.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[1] GIF 135x135 256x256+60+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[2] GIF 135x136 256x256+59+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010

out.gif

ここに画像の説明を入力してください

out-coalesce.gif

ここに画像の説明を入力してください

out-deconstruct.gif

ここに画像の説明を入力してください

最初に、ファイル2を入力する方法を確認します。out-convert.gifフレーム2は516x516offsetにあるため252+257、実際には圧縮されていますが、フレーム1はフルサイズです1024x1024

次に、3つのコンバージョンを比較すると:

  • out.gif:すべてのフレームは256x2565MiB以上で巨大であり、TODOなのはなぜですか?

    ほぼ256x256フレームにはゼロ以外のオフセットがあるため、視覚的には正しくありません(125+128フレーム2など)。

  • out-coalesce.gif:すべてのフレームに256x256正しいオフセットがあります0+0

    出力は視覚的には正しいように見えますが、出力ファイルのサイズは2.0 MiBです。 out-deconstruct.gif

  • out-deconstruct.gif:圧縮フレーム、最終出力サイズ1.9 MiB。

    に比べてそれほど小さくはありませんがout-coalesce.gif、これは黒い地面が本当によく圧縮されているからだと思います。一般的には非常に重要です。

ffmpegとgifsicle

また、次のコマンドも試しました。

ffmpeg -i out-convert.gif -vf scale=256:-1 out-ffmpeg-small.gif
gifsicle --resize 256x256 out-convert.gif > out-gifsicle.gif

そして、どちらも1.5 MiBの出力をさらに小さく表示します。

参照:静止画像からアニメーションGIFを作成するには(コマンドラインを使用するのが望ましい)。

TODO:なぜ彼らはそれをより小さくすることができconvertますか?彼らはより良い最小の差分長方形を選択しているだけですか、それとも何か他のものですか?

Ubuntu 18.10、ffpmeg 4.0.2-2、ImageMagick 6.9.10-8でテスト済み。


3

私はそれに慣れているのでimagemagickソリューションを探していましたが、最終的には@samの提案で行きましたgifsicle。それは私が望んでいたことだけで、面倒なことはしなかった。

結果として得られるファイルサイズをさまざまな方法で最適化できますが、サイズを減らして色数を減らしました。魅力のように働いた:

gifsicle --resize 48x48 --colors 16 original.gif > smaller.gif
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.