VP8・VP9・AV1と、WebMのGIFに残るもの
WebMはMatroskaをもとにしたコンテナで、オープンなコーデックだけを使います。映像はVP8・VP9・AV1、音声はOpus・Vorbisです。MDNはVP9とVP8をWebMが必須とする2つの映像コーデックと説明しており、AV1は後から加わり、デコードはブラウザと端末にもっと左右されます。Nerulioが使うのは映像トラックだけです。
Nerulioはヘッダーの値を信用せず、ファイル末尾のパケットから長さを計算します。ブラウザの画面録画のようなリアルタイムの録画ツールが書いたWebMでは、ヘッダーの値が欠けていることがあるため重要です。タイムラインと既定の6秒の区間は実際の長さを使います。
VP8とVP9は、透明な動画のためのアルファチャンネルを持てます。GIFはパレットの1色を完全な透明にできるだけで、NerulioのGIF書き出しはそれを使わないため、透明な部分は不透明になります。透明なアニメーションが必要なら、WebMのまま使うか、作ったツールから連番PNGで書き出してください。
- Matroska
- WebMのもとになったコンテナ。WebMはWeb向けのコーデックに限定しています。
- VP9
- オープンでロイヤリティフリーの映像コーデック。WebMが必須とする2つのうちの1つ。
- アルファチャンネル
- 画素ごとの透明度。WebMのVP8・VP9は持てますが、GIFは透明のオン・オフだけです。
例:60fpsの画面録画のWebM
1280 × 720の録画6秒を640 px・24fpsで:
元の動画 1280 × 720 VP9、60 fps、Opus音声、20 s
区間 8.0 → 14.0 s(6 s)
フレーム 6 s × 24 fps = 640 × 360 pxで144フレーム(元の2.5フレームに1つ)
遅延 40または50 ms:12フレーム = 500 ms、平均24 fps
番号データ 640 × 360 × 144 = LZW前で3,320万バイト
平坦なUI 画面の色は256色のパレットに収まる。ディザリングはオフ
画面録画では、色数を減らすより幅を狭めたり15fpsにしたりするほうが容量に効きます。平坦な画面の色はすでにパレットに収まっているからです。
WebMからGIFへ
| WebMの中 | Nerulioで | GIFでは |
|---|
| VP8・VP9・AV1の映像 | WebCodecsでデコード | 最大256色のパレットフレーム |
|---|
| ヘッダーの長さ(欠けていることがある) | パケットから測る | 正しいタイムラインと区間 |
|---|
| アルファチャンネル | GIFの書き出しでは使わない | 不透明なフレーム |
|---|
| Opus・Vorbisの音声 | 読まない | 音なし |
|---|
結果の確認
- 開いたら、タイムラインの長さが録画の長さと合っているか確認します。
- 実行前に、フレーム数と予想容量を確認します。
- 透明なWebMだった場合は、GIFを明るい背景と暗い背景で見ます。不透明になっています。
トラブルシューティング
| 症状 | 考えられる原因 | 確認方法 | 対処 |
|---|
| AV1のWebMでデコーダーのエラー | このブラウザや端末にAV1デコーダーがない | ffprobeでcodec_name=av1 | AV1をデコードできるブラウザを使うか、VP9で録画する |
|---|
| 透明な背景がべた塗りになった | ここのGIF書き出しは透明色を使わない | — | WebMのまま使うか、元のツールから連番PNGで書き出す |
|---|
| 画面録画の小さな文字がぼやける | 1280 pxを480 pxに縮めると小さな文字がつぶれる | 100 %で比べる | 元の幅を選ぶか、必要な部分だけ切り抜き、代わりにfpsを下げる |
|---|
| GIFがWebMよりずっと大きい | VP9はフレーム間の変化を圧縮するが、GIFはフレームを丸ごと保存する | 2つの容量を比べる | 再生できる場所ならWebMを使い、GIFは区間を短くするかfpsを下げる |
|---|
ほかの方法
| 方法 | こんなときに向いています |
|---|
| WebMのまま使う | ブラウザはWebMをそのまま再生できます。小さく、透明も音声も保てます。 |
|---|
palettegenとpaletteuseを使うFFmpeg | スクリプト、一括処理、クリップ全体で1つのパレット。 |
|---|
この方法の限界
- 透過GIFは書き出しません。
- AV1のWebMにはAV1デコーダーのあるブラウザが必要です。
バージョンと出典
tests/media-browser.mjsで、Chromium 153とFirefox 155を使って確認しました。音声なしの60fps VP9のWebMをデコードして60fpsで再エンコードし、存在しない音声トラックを作りませんでした。GIFのエンコードはgifenc 1.0.3です。WebMのコーデックはMDN、AV1のブラウザー対応はcaniuseに基づきます。
参照した公式ドキュメント
WebMをGIFに変換
WebMはWeb向けのオープンな動画形式で、Chrome・Firefoxでよく再生されます。
GIFは幅・フレームレート・色数で容量が大きく変わります。短い区間と控えめな幅が共有に向いています。
ファイルはサーバーにアップロードされず、このブラウザ内だけで処理されます。
動画 → GIF
幅・FPS・色数を設定し、フレームを順番に処理。
使い方
- 動画を開き短い区間を選択
- 幅・フレームレート・色数を設定
- GIFを保存し動き・色・容量を確認
対応形式
MP4 / WebM / MOV → GIF — 読み込み・書き出しはブラウザの対応状況によります。
このツールでできること
1フレームずつ読み、GIFの幅・FPS・色数・ディザを選択します。
処理方式と検証状況
advanced · WebCodecs sequential frames / gifenc adaptive palettes / measured size targets. 品質検証中です。Pro・Flagship水準はまだ実証されていません。
書き出す前に
高速カットは範囲内のキーフレームに短縮します。精密モードは再エンコードし、コーデック対応は環境次第です。可能なら端末の一時保存を使います。互換録画の短時間制限は残ります。
よくある質問
対応サイズは何で決まりますか?
端末のメモリ・保存容量・コーデック対応によります。テスト例はすべてのファイルの動作保証ではありません。
ファイルはアップロードされますか?
このツールで開いたファイルはアップロードせず端末で処理します。コミュニティの投稿に明示的に添付する画像は別途アップロードされます。一部のエンジンやモデルは外部から取得するため、IPアドレスなどの接続情報は配信元に伝わります。
作業は自動保存されますか?
いいえ。画像と編集状態はこのタブに保持され、メディア出力は端末の一時保存を利用する場合があります。言語を変えても作業は残りますが、再読み込み、タブを閉じる操作、別のページへの移動で失われることがあります。