タイルのアニメーションGIF


10

imagemagic / montageを使用して、ループしたアニメーションGIF(非アニメーションGIFと混合)を並べて表示する方法はありますか?

つまり、時間ではなく空間でアニメーションを連結したいのです。アニメーションのフレーム数とその長さによって、2つのアニメーションをきれいに組み合わせることができない場合があることに気づきました。しかし、すべてのフレームが何らかの方法で存在している限り、プログラムは近似と推測を行い、フレームを拡張/繰り返すことで問題ありません。

私はもう試した

convert *.gif -append output.gif

そして

montage *.gif -mode concatenate -tile x1 output.gif

しかし、これらはどちらもアニメーションGIFを複数の個別の非アニメーションGIFとして扱います。

おそらく、アニメーションのフレームをフレームごとに分解するスクリプトを作成し、必要に応じて短いループを繰り返し/伸ばして最長のループに一致させ、アニメーションのないgifを最長のアニメーションのフレームと同じ数だけ繰り返し、対応するフレームをつなぎ合わせることができると思いますで単一の大きなフレームに変換し-append、それらの大きなフレームを1つの大きなgifに結合します。しかし、これが簡単なコマンドですでに可能である場合、私はホイールを再発明したくありません。

もちろん、imagemagick以外の無料のオプションも利用できます。



2
それはおそらく意図されていなかったので、それを取り上げます。深刻なコメントとして。はい、GIFを並べて表示します。しかし、永久に、HTMLではありません。リンクありがとうございます。その特定のGIFを後で使用するために保存します。
tsbertalan 2013

1
@tsbertalan最終的にこれを理解しましたか?
Seb Barre

回答:


1

時間をかけていくつかのアニメーションを一致させたいように聞こえますが、プログラムが各フレームとその遅延を読み取ってから、遅延が満たされるまで一定の周期でそのフレームを出力します。例:1フレーム、1秒の遅延、および「周波数」は100ミリ秒なので、100ミリ秒で10フレームを書き出す必要がありますか?そして、線形モンタージュに変換しますか?

そのような処理を実行するには、プログラムまたは多額のスクリプトが必要であり、「頻度」(ここでは100ミリ秒)を定義する必要があります。

しかし、これはうまく機能します:(gifsicleはパッケージ、モンタージュはimagemagickパッケージの一部です)

gifsicle --unoptimize cool_animation.gif | \
  montage -tile x1 - linear_frames.png

(読みやすくするために改行)

最初の行は、入ってくるgifを(stdoutへの)個々のフレームに分割しますが、レイヤーは塗りつぶされています。最初は--unoptimizeオプションを指定しないと、最初のフレームが表示されますが、後続のフレームには毎回変更されたもののみが含まれていました。奇妙なモンタージュのために作られました!

2行目は線形出力を構築し、各フレーム画像(標準入力から)を取得して、指定した順序で配置します。水平線に沿って配置するには「x1」。

単一のファイル名(cool_animation.gif)を複数のファイル名、またはワイルドカード* .gifに置き換えることもできます。

これがあなたが探しているものかわかりません。


gifsicle --colors=255 DATA.gif | gifsicle --unoptimize | montage -tile x1 - linear_frames.pngƬᴇcʜιᴇ007のテストイメージ用に変更すると、これによりimgur.com/a/Likr9が得られます。正確に私が探しているものではありません。元の目的が思い出せない。おそらく、すべてを明示的に壊すためのスクリプトを書いただけだと思います。
tsbertalan 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.