MP4の中身と、GIFに残るもの
MP4はコンテナです。中の映像はたいていH.264(AVC)で、MDNはMP4の映像コーデックとしてAV1とVP9も挙げており、多くのスマホはHEVCで記録します。コンテナにはフレームごとの時刻と、スマホの録画なら回転情報が入っています。NerulioはMediabunnyでそれを読み、必要なフレームだけを時刻順にバックグラウンドのワーカーでデコードします。
スマホのMP4は30fpsや60fpsで、フレーム間隔が一定でない可変フレームレートで記録されることがよくあります。GIFの遅延は固定なので、Nerulioは区間を1 ÷ fps秒の等間隔で区切り、各瞬間に表示されているフレームを取ります。60fpsの録画を15fpsにすると4フレームに1つが残り、不規則な元のタイミングは一定のテンポになります。
縦長のスマホMP4は、たいてい横長の画素に90°の回転情報を付けて保存されています。先にフレームを正しい向きにしてから縮小するので、選んだ幅は正しい向きの絵に適用されます。1080 × 1920のクリップを幅480 pxにすると480 × 853です。
- H.264(AVC)
- 最も一般的なMP4の映像コーデックで、ブラウザが広くデコードできます。
- 可変フレームレート
- フレームの時刻の間隔が一定でないこと。スマホや画面録画でよくあります。
- 回転情報
- 保存された絵を回して表示するよう示すメタデータ。
例:60fpsで撮った4秒の縦長スマホMP4
幅480 px、15fps、4:5で切り抜き:
元の動画 表示サイズ1080 × 1920(保存は1920 × 1080 + 90°の情報)、60 fps、H.264 + AAC
幅480 正しい向きにして480 × 853 px
フレーム 4 s × 15 fps = 60フレーム:元の4フレームに1つ
4:5切り抜き 480 × 600 px、中央基準(253 px削る:上126、下127)
番号データ 480 × 600 × 60 = LZW前で1,730万バイト
AAC音声 読まない
切り抜かなければ同じGIFは480 × 853 × 60 = 番号データ2,460万バイトになります。縦に長いスマホのクリップは、切り抜くか幅を狭める価値があります。
MP4からGIFへ
| MP4の中 | Nerulioで | GIFでは |
|---|
| H.264・HEVC・AV1の映像トラック | WebCodecsで1フレームずつデコード | 最大256色のパレット画像 |
|---|
| フレームの時刻(一定または可変) | 区間内で1 ÷ fps秒ごとに取り出す | 1/100秒単位の遅延。15fpsなら70-60-70 ms |
|---|
| 回転情報 | 縮小の前に適用 | 正しい向きのフレーム |
|---|
| AAC音声トラック | 読まない | 音なし |
|---|
| その他のトラック、チャプター、字幕 | 無視 | — |
|---|
結果の確認
- 開くと、ファイルの行に正しい向きでのサイズと長さが出ます。縦横が逆なら、MP4に回転情報がありません。
- 要約のフレーム数は、秒数 × fps ÷ 速度になるはずです。
- 「結果」と「元の動画」のタブで、GIFの最初のフレームと区間の始まりのMP4を比べます。
トラブルシューティング
| 症状 | 考えられる原因 | 確認方法 | 対処 |
|---|
| GIFを始めてすぐデコーダーのエラー | MP4にHEVCかAV1が入っていて、このブラウザにそのデコーダーがない | ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nw=1 clip.mp4 | デコードできるブラウザを使うか、MP4をH.264で書き出し直す |
|---|
| GIFがMP4よりカクカクする | 60fpsのMP4を15fpsで取り出すと4フレームに1つしか残らない | 要約のフレーム数 | 24fpsを選ぶか、切り出しで短いMP4のままにする |
|---|
| GIFが横向きになる | MP4に回転情報がない、または読み込み側が適用しない形式 | スマホ標準のプレーヤーと比べる | スマホや編集ソフトからMP4を書き出し直す |
|---|
| 縦長のクリップでファイルが大きすぎる | 縦に長いフレーム:幅480 pxで高さ853 px | 結果のサイズ | 4:5か1:1で切り抜くか、320 pxを選ぶ |
|---|
ほかの方法
| 方法 | こんなときに向いています |
|---|
MP4にpalettegenとpaletteuseを使うFFmpeg | クリップ全体で1つのパレットを使うスクリプトや一括処理。 |
|---|
| 短いMP4のままにする | 投稿先がMP4を再生できるなら、GIFより小さく音声も付きます。切り出しで切っておきましょう。 |
|---|
この方法の限界
- ブラウザがMP4の映像コーデックをデコードできる必要があり、HEVCとAV1の対応はブラウザと端末によって違います。
- 使うのは主な映像トラック1本だけです。
バージョンと出典
tests/media-browser.mjsで、1920 × 1080のH.264/AAC MP4を使いChromium 153とFirefox 155で確認しました。2秒を640 px・12fpsにすると幅640 pxの24フレームになりました。MP4のコーデックはMDN、HEVCのブラウザー対応はcaniuseに基づきます。
参照した公式ドキュメント
MP4をGIFに変換
MP4はスマホ・カメラ・編集ソフトで最も使われる動画形式です。
GIFは幅・フレームレート・色数で容量が大きく変わります。短い区間と控えめな幅が共有に向いています。
ファイルはサーバーにアップロードされず、このブラウザ内だけで処理されます。
動画 → GIF
幅・FPS・色数を設定し、フレームを順番に処理。
使い方
- 動画を開き短い区間を選択
- 幅・フレームレート・色数を設定
- GIFを保存し動き・色・容量を確認
対応形式
MP4 / WebM / MOV → GIF — 読み込み・書き出しはブラウザの対応状況によります。
このツールでできること
1フレームずつ読み、GIFの幅・FPS・色数・ディザを選択します。
処理方式と検証状況
advanced · WebCodecs sequential frames / gifenc adaptive palettes / measured size targets. 品質検証中です。Pro・Flagship水準はまだ実証されていません。
書き出す前に
高速カットは範囲内のキーフレームに短縮します。精密モードは再エンコードし、コーデック対応は環境次第です。可能なら端末の一時保存を使います。互換録画の短時間制限は残ります。
よくある質問
対応サイズは何で決まりますか?
端末のメモリ・保存容量・コーデック対応によります。テスト例はすべてのファイルの動作保証ではありません。
ファイルはアップロードされますか?
このツールで開いたファイルはアップロードせず端末で処理します。コミュニティの投稿に明示的に添付する画像は別途アップロードされます。一部のエンジンやモデルは外部から取得するため、IPアドレスなどの接続情報は配信元に伝わります。
作業は自動保存されますか?
いいえ。画像と編集状態はこのタブに保持され、メディア出力は端末の一時保存を利用する場合があります。言語を変えても作業は残りますが、再読み込み、タブを閉じる操作、別のページへの移動で失われることがあります。