GIFの透かし除去が写真より難しい理由
写真は1枚の画像ですが、GIFはタイムラインです。GIF透かし除去ツールは、静止画ツールが直面しない3つの問いに答える必要があります。フレームをどうデコードするか、修復をフレーム間でどう一貫させるか、そして再エンコード時に色を壊さないようにするか、です。
デコード:フレームは独立した画像ではない
多くのアニメーションGIFは、前フレームから変化した画素だけと、その領域をどう扱うかを指示する処置命令(disposal)を格納しています。第12フレームを正しく修復するには、第12フレームが実際にどのように見えるかを再現する必要があり、それは第0フレームから処置チェーンを再生することを意味します。このツールはそれをストリーミング合成器で行い、同時に保持するキャンバスは最大4枚です。そのため60フレームのGIFが60枚のフルサイズビットマップに膨れ上がることはありません。
修復:1枚のマスクで多数のフレーム
フレームごとに選択範囲を描くのは非現実的なので、最初のフレームで一度だけ指定し、そのマスクを再利用します。これが、位置が固定されたオーバーレイ — 隅のロゴ、日付スタンプ、字幕バー — に強い理由です。画面内を移動するオーバーレイは、1枚のマスクでは表現できません。
また、全フレームでモデルを実行するのも無駄です。修復前に、指定範囲を前フレームの同じ領域と比較し、実質的に同一なら前回の結果を再利用してモデルをスキップします。固定透かし入りの画面録画では、かなりのフレームがモデルに触れずに済みます。
再エンコード:パレット共有が必要な理由
GIFが保持できる色は256色だけです。フレームごとに個別量子化すると、同じ色がフレームごとに異なるパレットインデックスに割り当てられ、再生時には色のチラつきとして現れます。そこで、アニメーション全体から最大8フレームをサンプリングしてモンタージュを作成し、そこから1枚のパレットを構築して全フレームをそれにマッピングします。透明色は実在の色から枠を奪わないよう、専用スロットとして確保されます。
このパイプラインこそが、単にGIFを読み込める画像編集ツールと、GIF透かし除去ツールを分けるものです。アニメーションは洗って書き出す1枚の画像ではなく、依存関係を持つフレームの列として扱われます。
