このようなアニメーションGIFファイルのサイズを変更したいdo.gif
convert do.gif -resize 24x24\! do-24.gif
を実行すると、do-24.gifでサイズ変更されますが、アニメーション化されません
同じアニメーションを取得する正しい方法でサイズを変更する方法は?
ファーストラン:
convert do.gif -coalesce temporary.gif
それから
convert -size <original size> temporary.gif -resize 24x24 smaller.gif
私はそれに慣れているためimagemagickソリューションを探していましたが、最終的に@samのgifsicle
( https://www.lcdf.org/gifsicle/ )の提案に行きました。 。それはちょうど私が望んだことをした、手間をかけなかった。
結果として得られるファイルサイズを非常に多くの異なる方法で最適化できますが、サイズを減らして色数を減らしました。魅力のように働いた:
gifsicle --resize 48x48 --colors 16 original.gif > smaller.gif
-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
最初に、ファイルout-convert.gif
の入力方法を確認します。これは、フレーム2がオフセット516x516
でのみ252+257
であるのに対し、フルサイズのフレーム1は1024x1024
であるためです。
次に、3つのコンバージョンを比較すると:
out.gif
:すべてのフレームは256x256
以上であり、約5MiBで巨大です、どうしてですか?
およそ256x256
フレームにはゼロ以外のオフセットがあるため、視覚的には正しくありません。フレーム2の125+128
!
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でテスト済み。