動画 → GIF

幅・FPS・色数を設定し、フレームを順番に処理。

動画の区間、幅(320・480・640 pxまたは元のまま)、フレームレート(10・15・24fps)を選び、必要なら速度・ループ・逆再生・切り抜きの比率・収める容量も決めると、Nerulioがそのフレームをデコードしてアニメーションを作ります。GIFは1フレーム最大256色で、各フレームの表示時間を100分の1秒単位で保存するため、容量と滑らかさは引き換えです。幅 × 高さ × フレーム数が容量を決めます。既定は480 px・15fpsで、フレームごとにパレットを作り、ディザリングは任意です。

動画をここにドロップ複数のファイルをまとめて処理できます
アップロードなし · この端末で処理

GIFが保存できるものと、大きくなる理由

GIFのフレームはパレット番号の格子で、LZW圧縮前は1画素1バイト、カラーテーブルは最大256色です。GIF89aの仕様では画像ごとにローカルカラーテーブルを持てます。Nerulioは各フレームの色からそのフレーム専用のパレットを作るので、場面が変わっても前の場面と色を分け合う必要がありません。

動画には256色よりはるかに多くの色があるため、空・肌・影のような滑らかなグラデーションは帯状に分かれます。ディザリング50 %や100 %は、フロイド–スタインバーグ法で丸め誤差を拡散し、帯を細かい粒に変えます。粒はLZW圧縮にとってノイズなので、ディザリングしたGIFは大きくなります。色数を減らす(128・64・32)とファイルは小さくなり、帯は目立ちます。

GIFには音声も、動画コーデックのような動きの圧縮もないため、全フレームの全画素の分だけ大きくなります。表示時間は1/100秒単位なので15fps(66.7ms)はそのまま保存できず、Nerulioは70msと60msを交互に使って平均を合わせます。速度は表示時間ではなく、取り出す瞬間を変えます。2倍速なら滑らかさはそのままで長さが半分になります。

パレット(カラーテーブル)
1フレームで使える最大256色。各画素はその中の番号を持ちます。
ディザリング
パレットにない色を表すため、近くのパレット色を模様のように混ぜること。
フレームの遅延
フレームが表示される時間。100分の1秒単位で保存されます。

例:1920 × 1080の動画6秒を既定の設定で

GIFの既定の区間は最初の6秒です。

フレームサイズ   480 × 270 px = 129,600画素
フレーム数       6 s × 15 fps = 90フレーム
遅延             70, 60, 70, 70, 60, 70 … ms   (3フレーム = 200 ms)
番号データ       129,600 × 90 = LZW圧縮前で1,170万バイト
24 fpsなら       144フレーム、遅延40, 40, 50 … ms、番号データ1,870万バイト
640 pxなら       640 × 360 × 90 = 番号データ2,070万バイト

その後LZWが番号データをどれだけ縮めるかは絵によって違うため、予想容量は推測ではなく、実際のクリップのフレーム3枚をエンコードして計算します。2倍速なら同じ6秒が45フレーム、3秒のGIFになります。

設定と容量への影響

設定選択肢容量への影響
幅320・480・640 pxまたは元のまま1フレームの画素数は幅の2乗で増える
フレームレート10・15・24 fpsフレーム数が比例して増える
色数(詳細)256・128・64・32色が少ないほど圧縮が効くが、帯が増える
ディザリング(詳細)オフ・50 %・100 %グラデーションが滑らかになり、ファイルは大きくなる
速度0.5倍・1倍・2倍2倍ならフレーム数と長さが半分
切り抜きなし・1:1・4:5・16:9、中央基準1フレームの画素数が減る
目標容量(MB)任意の値サイズを測りながら最大4回エンコード

結果の確認

  • 実行前に、要約にフレーム数と、実際にエンコードしたフレーム3枚から測った予想容量が出ます。
  • 実行後、結果の欄に幅 × 高さ、フレーム数、容量と、目標があれば達成したかが出ます。
  • GIFをブラウザと投稿先のアプリで開き、ループするか(ループをオフにしたなら1回で止まるか)確認します。

トラブルシューティング

症状考えられる原因確認方法対処
空や肌に帯が出る滑らかなグラデーションには1フレーム256色では足りないフレーム内で最も広いグラデーションを見るディザリングを50 %か100 %にし、256色のままにする
GIFが大きすぎる幅とフレーム数が掛け算になる。640 px・24fpsは480 px・15fpsの2.8倍の画素実行前に予想容量を比べる幅かfpsを下げる、区間を短くする、切り抜く、または目標容量を入れる
目標容量には収まったが、設定より画質が悪い収めるため、まず色数を64(次に32)に、次に幅とfpsを一緒に下げる結果の欄に最終的な幅とフレーム数が出る目標を上げるか、代わりに区間を短くする
長いクリップが遅い、または逆再生がメモリのメッセージで止まる全フレームをデコード・減色・圧縮し、逆再生は最後まで全フレームを保持する(番号データ64 MBまで)進行表示に全体の何フレーム目かが出る区間や幅・fpsを減らし、長いクリップでは逆再生をオフにする
スマホの動画でデコーダーのエラーが出るブラウザが映像コーデック(主にHEVC)をデコードできないコーデックの調べ方はMOVのガイドを参照デコードできるブラウザを使うか、H.264で撮影する

ほかの方法

方法こんなときに向いています
palettegenとpaletteuseフィルターを使うFFmpegクリップ全体に最適化したパレット1つと5種類のディザリング(既定はSierra-2-4A)をスクリプトで。コマンドラインのみです。
GIFの代わりに短いMP4・WebM投稿先が動画を受け付けるなら、同じ画質でずっと小さく、音声も付きます。動画の圧縮を参照。
スプライトシートをGIFに撮影した動画ではなくドット絵のアニメーションのフレームのとき。

この方法の限界

  • 透過GIFは作りません。すべてのフレームが不透明です。
  • 文字やスタンプの重ね合わせはなく、パレットはクリップ全体ではなくフレームごとに作ります。

バージョンと出典

tests/media-browser.mjsで、Chromium 153とFirefox 155を使って確認しました。2秒を640 px・12fpsにすると幅640 pxの24フレームになり、0.25 MBの目標は測定しながらのエンコードで達成し、逆再生・2倍速・1:1切り抜きのGIFは予定どおり5フレームで正方形になり、3フレームからの予想は実際の容量と25 %以内でした。フレームはMediabunny 1.58.1とWebCodecsでデコードし、gifenc 1.0.3でエンコードします。GIFの制約はGIF89aの仕様に基づきます。

参照した公式ドキュメント

動画 → GIF

幅・FPS・色数を設定し、フレームを順番に処理。

使い方

  1. 動画を開き短い区間を選択
  2. 幅・フレームレート・色数を設定
  3. GIFを保存し動き・色・容量を確認

対応形式

MP4 / WebM / MOV → GIF — 読み込み・書き出しはブラウザの対応状況によります。

このツールでできること

1フレームずつ読み、GIFの幅・FPS・色数・ディザを選択します。

処理方式と検証状況

advanced · WebCodecs sequential frames / gifenc adaptive palettes / measured size targets. 品質検証中です。Pro・Flagship水準はまだ実証されていません。

書き出す前に

高速カットは範囲内のキーフレームに短縮します。精密モードは再エンコードし、コーデック対応は環境次第です。可能なら端末の一時保存を使います。互換録画の短時間制限は残ります。

よくある質問

対応サイズは何で決まりますか?

端末のメモリ・保存容量・コーデック対応によります。テスト例はすべてのファイルの動作保証ではありません。

ファイルはアップロードされますか?

このツールで開いたファイルはアップロードせず端末で処理します。コミュニティの投稿に明示的に添付する画像は別途アップロードされます。一部のエンジンやモデルは外部から取得するため、IPアドレスなどの接続情報は配信元に伝わります。

作業は自動保存されますか?

いいえ。画像と編集状態はこのタブに保持され、メディア出力は端末の一時保存を利用する場合があります。言語を変えても作業は残りますが、再読み込み、タブを閉じる操作、別のページへの移動で失われることがあります。