web-dev-qa-db-ja.com

ImageMagickを使用してアニメーションGIFをトリミングするにはどうすればよいですか?

画像のトリミングに関する情報はたくさんありますが、アニメーションをトリミング(またはトリミング)しようとすると、奇妙な結果が生じます。時々、ちらついたり、余分なフレームが付いたり、一部のフレームが正しくトリミングされて、他のフレームがオフセットされます。これをすべて防ぐにはどうすればよいですか?

55
jimmetry
convert input.gif -coalesce -repage 0x0 -crop WxH+X+Y +repage output.gif
  • アニメーションgifはスペースを節約するために最適化されることがよくありますが、imagemagickはトリミングコマンドを適用するときにこれを考慮していないようで、各フレームを個別に処理します。 -coalesceは、フレーム全体を再構築します。
  • 他のコマンドでは、元のgifで提供されたオフセット情報が考慮されるため、-repage 0x0で強制的にリセットする必要があります。
  • トリミング自体は簡単で、幅、高さ、xオフセット、yオフセットがそれぞれ指定されます。たとえば、xオフセット50 = 40x30 + 50 + 0で幅40、高さ30のクロップ。
  • クロップは、切り取ったキャンバスを画像から削除しません。トリミング後に+repageを適用すると、これが行われます。
74
jimmetry

合体とページの変更を行っても、ImageMagickでアニメーションGIFを適切にトリミングおよびサイズ変更できませんでした。

Gifsicle というプログラムを見つけましたが、アニメーションGIFの操作に最適です。

gifsicle --crop 0,0-100,100 --output out.gif in.gif

また、他のあらゆる種類の操作を実行できます。見てみな!

33
fletchowns

アニメーションはしばしば最適化されます。つまり、一部のフレームは他のフレームよりも小さくなります。そのため、ImageMagickでは、おそらくトリミングする前にアニメーションを結合する必要があります。

convert in_animation.gif -coalesce -crop WxH+X+Y +repage -layers optimize out_animation.gif


ちらつきを避けるために、入力アニメーションを読み取る前に-disposeメソッドを追加する必要がある場合があります。変更を加える場合は、最後に-delayと-loopも設定します。

見る

http://www.imagemagick.org/Usage/anim_basics/#disposehttp://www.imagemagick.org/Usage/anim_basics/#coalescehttp://www.imagemagick.org/script/command-line-options.php#layers

0
fmw42

次の行はMacで私と一緒に働いた

convert -dispose 2 input.gif -trim -layers TrimBounds animation.gif

ソース

0
Shaaban