|
|
|||||||||||||||||||||||||||||
|
23_Animation_Basics アニメーションの基礎 |
H.Kamifuji . |
|
ここでは、ImageMagick6.x.x Examples of ImageMagick Usage(Examples_www_Version_6) の Animation Basics から ImageMagick7.x.x への移植について、掲載します。 日本語に翻訳した ページ(23_Animation_Basics.pdf) です。 従来は、UNIX 系の sh や windows の .bat コマンド・プロンプトを、利用していました。PowerShell 奮闘記 を、掲載したこともあり、PowerShell を、利用してみます。 Windows 版 ImageMagick 7.1.0-20 を ImageMagick 7.1.0-62 にアップデートしての見直した。 また、gif_anim_montage.ps1 を改修してのみなおした。 現在(2024/10/27)では、PowerShell 7.4.6 が最新のようです。見直しをはじめましたが、 何と、" > パイプ問題(?)"が 解 消 されています。 パイプ関連事項を見直します。 現在(2024/10/26)では、ImageMagick 7.1.1-39 が最新のようです。上位互換について確認します。 |
ImageMagick がイメージリストの出力を処理する既定の方法は、マルチページイメージを生成することです。ただし、GIF イメージ形式の場合は、この形式は "GIF アニメーション" という特殊な形式になります。
PowerShell 用に移植した"star_field.ps1"です。実行時引数の扱いを PowerShell の所作に合わせ一部変更しています。ヘッダ・コメントを参照方。
|
GIF アニメーションのデフォルトの "" 設定は '' で、ほとんどのアニメーションプログラムは''廃棄設定と同じように扱います。基本的に、これはコンピュータに、この特定のフレームでオーバーレイされているものは何でも残すように指示します。より正確には、「何もしない」。 ただし、キャンバス全体は、ループと繰り返しの前に、アニメーションシーケンスの最後に常にクリアされることに注意してください。 たとえば、標準の「なし破棄」アニメーションです。
|
廃棄方法は比較的単純です。現在の画像が完成したら、画像がオーバーレイされる前の状態にキャンバスを戻します。前のフレームイメージも '' 破棄メソッドを使用した場合、結果はそのフレームの前と同じになります。等。。等。。等。。。 たとえば、このアニメーションでは、後のフレームの各フレームは、そのフレームに関連付けられたイメージをオーバーレイする前に、'破棄設定を持つイメージの最初のフレームに戻ります。 その結果、各フレームイメージが、そのイメージの持続時間だけ重ね合った背景キャンバスになります。
|
最初の 2 つの "" メソッドは比較的単純ですが、'' はおそらく理解するのが最も難しいです。 特定のフレームの遅延時間が終了すると、そのフレームによってオーバーレイされていた領域がクリアされます。キャンバス全体ではなく、オーバーレイされた領域だけです。それが完了すると、結果のキャンバスは、そのフレームイメージによってオーバーレイされるアニメーションの次のフレームに渡されるものです。 ここでは、各フレームを次のフレームに置き換えるだけです。
|
|
GIF アニメーションの基本、その種類、最適化、および処理の手法を続ける前に、既存のアニメーションを研究するためのいくつかのテクニックが必要です。 アニメーションは、各フレームに詰め込まれた多くの情報で構成されています。この情報の一部は、デフォルトの IM "" コマンドを使用して確認できます。
|
ここまで見たように、ImageMagick は、ファイル形式で許可されている場合、デフォルトで複数の画像を 1 つのファイルに保存しようとします。ただし、「マルチイメージ リストIM の作成」で説明したように、"" 設定を使用して、各イメージを個別のイメージとしてディスクに保存するように指示します。 たとえば、ここでは、GIF アニメーションの 1 つを読み取り、アニメーション シーケンス内の個々のフレーム イメージを出力します。+adjoin
上記の実際の画像を調べる場合、ほとんどの Web ブラウザは 100x100 の領域を大きく表示していますが、各サブフレームが表示されます。実際のところ、実際の画像のほとんどは、上記の「識別」コマンドに示されているように、実際には32x32ピクセルに過ぎません。 それは、領域のほとんどは、画像「ページジオメトリ」または「仮想キャンバス」として知られている、何も描かされていないキャンバスです。アニメーションの最初の画像は、大きな 'canvas' と他のフレームごとに、この大きなキャンバス上の「オフセット」位置を定義します。 この追加情報は、"""設定で保存されたフレームに保存されます。そのように、あなたはGIFアニメーションを再構築することができます。ページ情報は、各フレーム イメージに保存されるだけでなく、遅延、ループ、および GIF 破棄の設定も保持されます。
通常、アニメーション サブイメージを抽出する場合は、通常、画像の遅延をリセットし、設定を破棄して、編集や表示に影響を与えないようにします。 たとえば、ここでは不要な仮想キャンバスを削除し、タイミングの遅延と廃棄を相殺してリセットします。 もちろん、そのメタデータをジャンクした場合は、そのデータを記録して編集する何らかの方法が必要です。サブイメージの両方を抽出し、アニメーションのメタデータを保存するスクリプトについては、アニメーションの再ビルドに使用できる形式でアニメーションリスト情報(下)を参照してください。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
ただし、通常は、サブフレームの形でアニメーションを表示することは、一般的なアニメーションではあまり役に立ちません。 一つには、高度に最適化されたアニメーションは、それらが一緒に収まる方法を視覚的に示すことなく、非常に小さな部品の多くで構成することができます。また、圧縮最適化のために追加された他の多くのノイズを持ち、アニメーションのファイル全体のサイズを小さくすることもできます。 たとえば、アニメーションの個々のサブフレームを見るだけで、このアニメーションが実際に何をしたのかを理解することは非常に困難です。
あなたが見ることができるように、結果はアニメーションのフィルムストリップのようなもので、前の作品がどのように組み合わさって手描きの文字「K」を形成するかをはっきりと見ることができます。 IM バージョン 6.2.6 の時点で、""" コマンドは "" の使用を理解し、アニメーション フレームのイメージのような「フィルム ストリップ」を作成することができ、上記のとおりにしました。このバージョンには、合体の修正も含まれており、GIFアニメーションの作品は少なくともこのバージョン(または最新バージョン)でなければなりません。 |
|||||||||||||||||||||||
演算子を使用すると、アニメーションから実際のイメージを抽出でき、"" はアニメーションの結果のフレームを見ることができますが、どちらの方法でもアニメーションに関する多くの情報が省けます。 アニメーションイメージを慎重に操作することで、実際のフレームだけでなく、大きなキャンバス上でのフレームの配置も表示するようにフレームを表示できます。ここでは、アニメーションを表示する方法の1つです。+adjoin-coalesce
ここでは、アニメーションの動作を明確に確認できます。各サブフレーム イメージは、前のすべてのオーバーレイに追加されるように配置されます。その結果、ゆっくりと成長している画像が表示されます。各フレームは、それが配置されている「仮想キャンバス」よりもはるかに小さいです。 私はGIFアニメーションの開発とデバッグの間にこの表示技術をたくさん使用し、シェルスクリプトに変換しました"gif_anim_montage"、 そして、アニメーションの各フレームの上の詳細の一部も一覧表示するために拡張しました。 PowerShell 用に移植した "gif_anim_montage.ps1"です。実行時引数の扱いを PowerShell の所作に合わせ一部変更しています。ヘッダ・コメントを参照方。
さまざまなフレームで使用されるタイミングのバリエーションに注意して、ペンがページから持ち上げられ、再配置されているかのように一時停止します。タイミングが変化するアニメーションは、最も興味深いものの一部ですが、後の IM の例ページで見るように、処理が難しくなります。 ""スクリプトはまた、合体アニメーションの半透明のコピーを下敷きにする特別なオプション'' も。これにより、新しいサブフレームが表示されるアニメーションをどのように変更するかを確認できます。 もちろん、これは半透明のピクセルを持っているので、「PNG」画像形式が必要でした、 またはスクリプトが提供する多くの「背景」オプションのいずれかを使用して、アニメーションの夏のイメージにGIFまたはJPEGフォーマットを使用することもできます。 その他のオプションでは、使用する行または列の数を定義したり、透明でないさまざまな背景を設定したり、デフォルトの黒ではなく赤いボックスを使用したりできます。 このスクリプトは、IM の例の次の数ページで多くの使用されます。提案やコメントは歓迎します。 |
|||||||||||||||||||||||||||||||||||||||||||||
|
私が述べたように、"+adjoin" と "-coalesce" を使用すると、"-repage geometry" は、すべての抽出とGIFアニメーションを見て便利な方法です。しかし、それらはすべて、その過程で元のアニメーションに関する情報を破棄します。 この追加情報は、IM ""コマンドと"""オプションを使用して、フレーミング、遅延時間、フレーム廃棄などに関する追加情報を参照できます。しかし、私は、おそらく他のほとんどのユーザーは、このコマンドからの出力を見つけます, 圧倒的で、実際には直接使用できません。 これは私が書いた別の特別なシェルスクリプトが入ってくるところです。"gif2anim" スクリプトは、アニメーションの個々のフレームを分離しますが、これらのイメージからアニメーションを再構築するために必要な IM "オプションを正確に把握します。 "gif2anim" はアニメーション逆アセンブラと考えることができ、IM オプションの観点からアニメーションの概要を生成できます。 たとえば、作成に使用された元の ""設定と使用された個々の画像を復元するために使用してきたアニメーションの例をデコードできます。 PowerShell 用に移植した "gif2anim.ps1"です。実行時引数の扱いを PowerShell の所作に合わせ一部変更( -d 1 : デバックオプション)しています。ヘッダ・コメントを参照方。 インストールされているバージョン( ImageMagick6.x と ImageMagick7.x )を自動に識別します。
デフォルトでは、"gif2anim" スクリプトは、個々のイメージと ".anim" オプション ファイルに同じベース ファイル名を使用します。このように、上記のコマンドで生成されたアニメーションシーケンスファイルは、個々のフレーム画像を "canvas_prev.gif" から "canvas_prev_001.gif" にして "canvas_prev.anim" という名前が付けられます。 結果を詳しく調べると、この GIF アニメーションを最初に作成したときに使用した元のオプションを実際に再作成できたことがわかります (「 フレーム廃棄方法 前に破棄- バックグラウンド キャンバスを保持 」を参照)。また、実際にアニメーションを生成することは重要ではありませんが、オーバーレイされたフレームのサイズとタイミングもコメントとしてリストされ、学習しやすくなります。 結果をファイルに保存するのではなく、アニメーション シーケンスオプションを画面にリスト表示するには、"-d 1" フラグを使用します。 これは、アニメーション シーケンス ファイルを保存するのではなく、アニメーション シーケンス ファイルを出力するだけ、またはアニメーションの個々のフレーム イメージを出力するだけです。
".anim" ファイルと個々のフレーミング・イメージを指定すると、アニメーションを再構築するために補完的なスクリプト"anim2gif"を使用できます。 PowerShell 用に移植した "anim2gif.ps1"です。実行時引数の扱いを PowerShell の所作に合わせ一部変更しています。ヘッダ・コメントを参照方。 インストールされているバージョン( ImageMagick6.x と ImageMagick7.x )を自動に識別します。 デフォルトでは"anim2gif" は"_anim.gif"接尾辞を付けて GIF アニメーションを再作成します。生成された "canvas_perv_anim.gif" アニメーションが生成され、元のアニメーションとまったく同じように見え、動作することがわかります。 このスクリプトは、単に"アニメーションシーケンスファイル"で使用される特別な文字列 "BASENAME" を置き換え、すべてのコメントを取り除き、その後、"magick convert" コマンドに残された変換オプションを渡すだけです。つまり、上記のファイルをコメント付きの 'convert' スクリプトのタイプとして扱います。 特別な文字列が使用された理由は、この場合、".anim" ファイル自体の名前とは異なるベース ファイル名を指定できるためです。このようにして、オリジナルの修正版など、まったく異なるフレームイメージのセットを使用して、古いアニメーションとは異なるアニメーションを再作成できます。これは非常に便利な機能で、より複雑なアニメーション処理に使用されます。(例については、アニメーションを並べて追加するを参照してください)。 "gif2anim"と同様に、"anim2gif" スクリプトには、アニメーションの処理と変更に役立つ便利なオプションが多数あります。これらのオプションの一部は後で使用されます。例については、「アニメーションの追加」を参照してください。 また、".anim" ファイルはプレーン テキストなので、アニメーションのデコードされたイメージを使用して、タイミング、位置、アニメーションの繰り返しセクション、アニメーションへの新しいフレームやイメージの追加など、GIF のメタデータを調整できます。 これは、私がIMの例に関わるずっと前に、私が最初にスクリプトを書いた理由の後でした。 ここでは、アニメーション シーケンスを調べて、何が起こっているのか、フレーム間で適用されているタイミングを確認するのに"gif2anim"が最も役立ちます。 |
||||||||||||||||||||||||
|
この特別な "-layers" メソッド 'Dispose' は、時間の遅延が終了した後にフレームの外観を示し、GIF 破棄メソッドが適用されていますが、次のフレーム イメージがオーバーレイされる前に行われます。 つまり、これは、GIF "-dispose" メソッドの設定が実際にフレームに何を行うかを正確に示し、アニメーションの問題を正確に把握できます。 たとえば、個々のフレーム破棄メソッドが適用された後の、3 つのDispose メソッドの例アニメーションのそれぞれについて説明します。これらのアニメーションは、それぞれ「キャンバス画像」で構成され、「キャンバス画像」に「」設定が設定され、その後に4つの小さな画像がオーバーレイされ、その後、さまざまなGIF破棄メソッドによって破棄されたことを覚えておいてください。 'None' はアニメーションを破棄します。
上記を調べれば、3つのGIF破棄メソッドのそれぞれが、そのフレームのアニメーションをオーバーレイした画像をクリアする方法を正確に確認できます。これらの 3 つのアニメーションの最初のフレームは、常に '' の破棄に設定されるので、変更されないままであることに注意してください。後のフレームにおける破棄メソッドの効果が刺激性である。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ImageMagick でアニメーションを最適化する従来の方法は、結果をダウンロードしてアニメーション化する際に、その "deconstruct" 形式 を "-coalesce" より小さく、より高速にすることです。 これはもはやお勧めしません。代わりに、一般的な GIF オプティマイザーを使用する必要があります。 このオペレータは、一連の画像 (実際に表示されるときにアニメーション フレーム) を取り、2 番目以降の画像を前の画像と比較します。そのイメージを、変更されたピクセルの最小の長方形領域に置き換えます。ピクセルの変更は、カラー変更(オーバーレイ)かクリア(消去)かに関係なくカウントされます。 これは非常に簡単で、一般的なオーバーレイ アニメーションでは、そのアニメーションに最適なフレーム最適化が生成されます。ただし、オーバーレイ アニメーションでは 'None' の例破棄メソッドのみを使用します。 たとえば、上で生成した前のアニメーションを合体させ、オーバーレイアニメーションを形成し、"-deconstruct" 演算子を使って実行します。-deconstruct-coalesce
"Overlay Animations" が最適化され、特別な破棄設定は必要ありません。 これは、私が始めたオリジナルの手で生成されたアニメーションほど最適なものではありませんが、それ自体が便利です。 残念ながら "-deconstruct" はGIFアニメーション "-dispose" 設定を全く理解していません。したがって、上で作成した (左図を参照) の背景の破棄されたアニメーションなど、あるフレームから次のフレームにピクセルをクリアするアニメーションでこれを試してみると、失敗します。 ここでは、ちょうど示したアニメーションを取り、"-coalesce" と "-deconstruct" サイクルを使用して実行します。 下記は、ImageMagick 7.1.0-20 での実行結果です。 "-deconstruct" を見ることができるように、ゆっくりとアニメーションを破壊します。基本的には "-deconstruct" は、単に画像レイヤー間の違いを見つけるために設計されています。アニメーションを正しく最適化するように設計されたことはありませんし、以前にオーバーレイされたピクセルをクリア(消去または透明にする)するためにさまざまな廃棄手法を使用する必要があるアニメーションでは失敗します。 |
|||||||||||||||||||||||||||||
IM v6.2.6-2では、いくつかの追加のGIFフレーム比較メソッドが追加されました。 これらは、アニメーションを適切に最適化するために内部的に必要とされていましたが、コマンド ラインや他の API インターフェイスで使用できるほど役に立つと考えられていました。
|
|||||||||||||||||||||||||||||||||||||||||||||
見つけたほとんどの GIF アニメーションは、いくつかの基本的な種類のアニメーションに分類されます。これらのタイプを把握することで、あるフレームから別のフレームにアニメーションがどのように表示されているかを理解でき、アニメーションの処理方法や変更方法にショートカットを使用できます。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|