このページのコードが起動しませんでした。

index.htmlをフォルダから直接開くと、ブラウザがJavaScriptモジュールを読み込めません。そのためGIFを選んでも何も起きません。フォルダはhttpで配信してください。

powershell -ExecutionPolicy Bypass -File serve.ps1

そのうえでhttp://localhost:8080/を開いてください。

GIF分解 — 1コマずつPNGに

すべてのコマを、1枚ずつPNGで。

言語: 日本語
ソースを見る
GIFはブラウザー内で処理されます。処理のためのアップロードはありません。

GIFの読み込みも、展開も、描画も、すべてお使いのブラウザが行い、PNGはこの端末のメモリの中で作られます。仮にここの何かが送ろうとしたところで、このページの向こう側にアニメーションを受け取るサーバーが存在しません。

いまの通信: 確認中…

オフライン: 確認中…

鵜呑みにする必要はありません。DevToolsの「ネットワーク」タブを開いたままGIFを分解してみてください。画像もコマもファイル名も、どのリクエストにも載りません。回線を抜いてから分解してみるのでも構いません。

1 GIFを選ぶ

2 コマの出し方

残すコマ 全部ではなく2コマに1枚、5コマに1枚だけ取り出します。一覧表を作るときや、長い録画のときに。

表示時間の一覧 各コマがどれだけ表示され、どこに置かれていたか。PNGを並べたフォルダだけでは持ち出せない情報です。

フレーム

3 コマ一覧

Markdownで表示

GIFをコマに分解する手順

  1. GIFを選びます。選択欄にドラッグするか、手で選んでください。ブラウザがディスクから直接読み、見つけた内容をページが表示します。サイズ、コマ数、再生時間、繰り返し回数です。
  2. 1枚のPNGに何を入れるか決めます。見えているとおりのコマが、ほとんどの人が求めるものです。アニメーションのその瞬間の絵全体になります。そのコマが保存している画素だけは、ファイルが実際に持っている継ぎ当ての部分で、それ自身の大きさと位置のままです。GIFが小さく収まる理由がこれで、アニメーションの見た目とは別物です。
  3. 透過の扱いを決めます。PNGは透過をそのまま保てるので、これが正直な既定値です。透過を無視して黒く塗ってしまう場所へコマを持っていくのであれば、代わりに色で塗りつぶしてください。
  4. 欲しいコマを選びます。既定はすべてです。「2コマに1枚だけ残す」は長い録画を間引くための設定で、一覧のチェックボックスがそれより優先されます。番号は変わらないので、隣をどれだけ捨てても42コマ目は42コマ目のままです。
  5. ダウンロードします。一覧から1枚ずつでも、まとめて1つのZIPでも構いません。ZIPなら保存の確認が数百回ではなく1回で済みます。ZIPには、各コマがどれだけ表示されたかを書いたframes.txtを入れられます。PNGを並べたフォルダだけでは伝えられない、唯一の情報です。

詳しい解説

GIFをコマに分解する方法 アニメーションGIFの全コマをPNGで取り出します。なぜ一部のコマが絵の小さな断片でしかないのか、透明はどうなるのか、そして組み立て直せるように間隔を残しておく方法。

よくある質問

GIFはどこかにアップロードされますか?

いいえ。ファイルを読み、展開し、描くのはお使いのブラウザで、場所もお手元のハードウェアです。PNGもここのメモリで作られます。この道具にサーバー側はなく、ページのContent-Security-Policyには接続してよいアドレスがすべて書かれていて、そのどれもこのサイトのものではありません。回線を抜いても、GIFの分解はそのまま続きます。

コマの1枚が絵の一部にしか見えないのはなぜですか?

ファイルがそう持っているからです。GIFは最初の1枚と、そのあとに続く継ぎ当てでできています。2枚目以降は変わった長方形だけを保存し、画面の残りは前のコマが置いていったものです。動かない壁の前で話す人の映像なら、1コマにつき顔だけが保存され、絵全体は保存されません。この形式が巨大にならない理由はここにあります。

いま見えているのは「そのコマが保存している画素だけ」を選んでいるからです。「見えているとおりのコマ」に切り替えれば、どのPNGも、その瞬間のアニメーションの絵全体になります。

透過は保たれますか?

保たれます。GIFの透過は1ビットで、画素は塗られているか見えないかのどちらかしかありません。PNGはそれをそのまま保存できるので、透過部分はそのまま出てきます。塗りつぶした背景のほうがよければ、「透過部分」を色で塗る設定にしてください。その色はPNGに書き込まれ、あとから取り除くことはできません。

表示時間が思っていた数字と違うのはなぜですか?

GIFは表示時間を100分の1秒単位で持っていますが、ブラウザは1990年代から2以下の値を0.1秒に引き上げています。当時の回る地球儀のために書かれ、そのまま残った規則です。ファイルに0.01秒と書かれたコマは、どこでも0.10秒で再生されます。この道具は実際に再生される時間を表示し、ファイルの値と食い違うときは、その値も横に書きます。

分解したコマをまた1つに戻せますか?

戻せます。このサイトのGIF作成でも、画像の入ったフォルダを受け取れる別のソフトでも構いません。ZIPに入るframes.txtはそのためのものです。分解するとタイミングは失われます。PNGには表示時間を書いておく場所がないからで、代わりにこの一覧が各コマの表示時間と位置を持ち出します。

コマはどの形式で保存できますか?

PNGだけです。意図してそうしています。GIFのコマは最大256色と1ビットの透過で、PNGはそれをそのまま、劣化なく保存できます。JPEGなら透過は捨てられ、元のコマになかった色が作られ、平らな絵からはたいてい大きいファイルができます。JPEGが必要なら、あとから画像リサイズで変換してください。

読み込めるコマ数に上限はありますか?

元画像のバッファー、保持する差分、プレビュー、出力には512 MiBの計画見積もりを使い、デコード済みピクセルが128 Miを超える前に止めます。小さい差分でも元画像全体のバッファーは小さくなりません。安全でない計画は描画前に拒否し、部分的な結果もバッファー計画が収まる場合だけ利用できます。シートや集めたPNGも含みます。ブラウザー内部の割り当て、JSオブジェクト、canvasの上限により追加のメモリーや早い拒否があり得るため、空きメモリーの測定や不足しない保証ではありません。

壊れたGIFでも開けますか?

多くの場合は開けます。途中で切れたファイルや終端のないファイルから完全なフレームを保持します。不完全なフレームの不足部分には、透明色でない限りパレットの最初の色を使い、画面で知らせます。読めるフレームがないファイルや安全でないバッファー計画は拒否します。

無料ですか。アカウントは必要ですか?

無料です。アカウントも、ログインも、試用期間もありません。コマに透かしも入りません。このサイトには広告があり、それが費用を賄っています。広告にファイルの情報が渡されることはありません。

オフラインでも動きますか?

動きます。ページを一度読み込んでから通信を切っても、そのまま使えます。何もアップロードされていないことを示す、いちばん簡単な方法でもあります。処理のためにアニメーションをどこかへ送っている道具なら、線を抜いた瞬間に止まるからです。