短い答え
GIF分解を開いてGIFをドロップすると、すべてのコマがPNGとして並び、そのまま保存できます。1枚ずつでも、まとめてZIPひとつでも構いません。設定に触らなければ、たいていの人が思い浮かべるものがそのまま出てきます。つまり、その瞬間に見えているとおりの絵1枚ずつです。
このページの残りは、そのあとで驚かれる3つのことについてです。小さな断片でしかないコマ、よそへ持っていくと黒くなる透明、そしてコマが別々のファイルになった瞬間に消える間隔の話です。
GIFのコマとは本当は何か
GIFは写真の束ではありません。1枚の絵と、そのあとに続く継ぎ当ての列です。
2枚目以降のコマは、変わった長方形だけを持ち、あわせて「そのあとカンバスをどうするか」の規則を1つ持ちます。画面のそれ以外の部分は、単に前のコマが残していったものです。動かない壁の前で人が話している映像なら、1コマあたり絵1枚ではなく顔の長方形1つで済みます。動き補償も非可逆の工程も持たない形式が、まるきり使い物にならないわけではない理由は、それがすべてです。
ですから「14コマ目をください」には、どちらも同じくらい正直な答えが2つあり、この道具は両方を出します。
見えているとおりのコマ。その瞬間の絵全体、つまり14コマ目をそれ以前のすべての上に描いたものです。これが既定で、一覧表やサムネイル、投稿する静止画、あるいは編集ソフトへ持っていくコマが欲しいときはこちらです。
そのコマが持っている画素だけ。継ぎ当てそのものを、その大きさのまま、その位置のまま、持っていない部分は透明にして出します。14コマ目は口のあたりの60 × 40画素かもしれません。GIFのバイトがどこへ行ったのかを説明してくれるのはこちらの見方で、絵を収穫するのではなくアニメーション自体をいじるならこちらです。
保存されたコマが断片に見えても、ファイルはどこも壊れていません。それがそのファイルです。
後始末の規則と、穴を残すコマがある理由
どのコマも、次のコマが描かれる前に自分の長方形をどうするか、4つのうち1つの指示を持っています。保存されたコマの表示では、道具が各コマの下にそれを出します。
そのまま残す。ふつうはこれです。継ぎ当ては落ちた場所に残り、次のコマがその上に描きます。
あとで自分の範囲を消す。次のコマが来る前に、その長方形が拭われます。透明なものが動くアニメーションはこれをしますし、ちらつくGIFの古典的な原因でもあります。
下にあったものを戻す。カンバスは、このコマが描く前の状態へ戻ります。判子を押して、取り消すわけです。まれで、自作のGIF読み取りがいちばんよく間違えるのがこれです。
道具どうしを比べるなら知っておくとよい点がひとつ。仕様では「自分の範囲を消す」は背景色に戻すことになっていますが、1990年代以降のブラウザはどれも透明に消しています。当時のアニメーションがそう思って作られていたからです。この道具は意図してブラウザに従います。受け取るコマが、見えていたコマと同じであるようにするためです。
透明はどうなるのか
GIFの透明は1ビットです。画素は塗られているか見えないかのどちらかで、その中間はありません。柔らかい輪郭も、半分だけの影もないということです。背景が透明なGIFの輪郭が硬く、少しぎざぎざなのはそのためです。
PNGはそれをそのまま、劣化なしに保存できるので、コマは透明を保ったまま出てきて、勝手に何かが作られることもありません。透明を分かってくれる先へ持っていくなら、そのままにしてください。
そうでないなら、色で埋めてください。アルファチャンネルを無視するソフトはたいていそこを黒く描くので、ブラウザでは何ともなかったコマが黒い背景で届きます。ほとんどが透明な継ぎ当てなら、口の入った黒い長方形として届きます。先に色を決めておくのが対処です。それはPNGに書き込まれ、あとから取り消せません。既定にしていない理由はそれだけです。
コマが持てない間隔のこと
PNGには、何秒間表示されていたかを書いておく場所がありません。アニメーションをPNGに分解すると間隔は失われ、それは組み立て直そうとした瞬間に効いてきます。
ZIPに入っているframes.txtはそのためのものです。各コマの待ち時間と位置と大きさが並んでいるので、GIF作成でもよそでも、アニメーションを組み直せます。数キロバイトしかかかりませんし、あとから作り直す方法はありません。
GIFの待ち時間について、誰もが引っかかることが2つあります。
単位は100分の1秒なので、この形式が持てるいちばん細かい刻みは0.01秒です。ちょうど30 fpsのGIFというものは存在しません。1コマ0.03秒は33.3 fps、0.04秒なら25です。
0.02秒を下回るものは0.10秒で再生されます。ブラウザは1990年代からそう頭打ちにしています。当時の回る地球儀のために書かれ、そのまま消されずに残った規則です。1コマ0.01秒と書いてあるGIFは100 fpsを名乗り、10で再生されます。この道具は実際に再生される待ち時間を表示し、ファイルの中身と食い違うときはその値を並べて出します。この差こそ、分解して組み直したGIFが元より遅くなることがある理由だからです。
コマ番号と、桁をそろえてある理由
コマはname-001.png、name-002.pngのように、1から数えて最後の番号の桁数にそろえて出てきます。飾りではありません。frame9.pngは、どのファイル管理ソフトでも、連番を読み込むたいていのソフトでも、frame10.pngのあとに並びます。数ではなく文字として並べ替えるからです。桁をそろえた名前ならどこでも正しく並びますし、連番画像を読み込む編集ソフトはどれもその形を前提にしています。
長いアニメーションを「2コマに1枚残す」で間引いても、番号は振り直しません。42コマ目は42コマ目のままなので、ファイルは元のものとも、間隔の一覧とも突き合わせられます。
これにサーバーが要らない理由
GIFを読むのは2つの仕事です。ファイルのブロックをたどることと、画素を包んでいるLZW圧縮をほどくこと。あわせて数百行で、リポジトリにそのまま書いてありますし、動くのはあなたの端末の上です。回線を抜いてもこのページが働き続けるのはそのためです。
ブラウザはすでにGIFを再生できますが、部品は渡してくれません。<img>はアニメーションを返し、カンバスに描けばいつまでも1コマ目だけが返り、それ以上ができる唯一の機能はSafariにありません。だからここでは形式を自分で読んでいます。どのブラウザでも同じやり方です。そして自分で読んでいるからこそ、継ぎ当てや後始末の規則をお見せすることもできています。
ファイルをアップロードしても大丈夫かでは、この道具も含め、どんな道具についても同じことを教えてくれる確認を4つ挙げています。