本文へスキップ
AZ Tools

MP4 / ISO ベースメディア構造インスペクター

.mp4、.m4a、.m4v、そして QuickTime の .mov は同じコンテナで、ftyp に押されたブランドが違うだけです。このツールはその箱の構造をブラウザー内で読み取ります。アップロードは一切ありません。 最初に答えるのはファストスタートかどうかです。moov ボックスにはファイル内すべてのサンプルの索引が入っているため、moov が mdat の後ろにあるとプレーヤーは最後のバイトが届くまで再生を始められません。ローカルなら即座に開く動画が、同じバイト列を HTTP で配信した途端に何十秒も止まるのはこれが理由です。 その下にはボックスツリーが、種類・オフセット・宣言サイズ・ファイルに占める割合とともに入れ子で並びます。容量を食っているのが本当に映像なのか、大きすぎるカバー画像なのか、編集ソフトが残した free ボックスなのかが一目で分かります。 トラックごとに ID、ハンドラーが映像か音声か字幕か、サンプルエントリーから読んだコーデック、そして設定ボックスがあれば RFC 6381 の完全な文字列(avcC から avc1.42C01E、esds から mp4a.40.2、vpcC から vp09.00.30.08)を示し、映像には画面サイズ、音声にはサンプリング周波数とチャンネル数を添えます。 長さは生のティック数とそれを割るタイムスケールの形で表示します。15360 という値はタイムスケールが 600 なのか 15360 なのかを知るまで何も意味しませんし、ムービーヘッダーが最終的な答えでもないからです。トラックはムービーの長さを超えることがあり、フラグメント化されたファイルはたいていムービーの長さを 0 にして総時間を mvex/mehd に置きます。 作成日時と更新日時は、ISO BMFF が QuickTime から受け継いだ 1904 年紀元から換算し、マルチプレクサが 0 のまま残した場合は未設定と表示します。 宣言されたサイズは決して鵜呑みにしません。親より大きいサイズを主張するボックスは追わずに名前付きのエラーで拒否し、サイズ 0 は「終わりまで」、サイズ 1 は 64 ビットの拡張サイズとして読み、uuid ボックスの 16 バイトの拡張型はペイロードの前で読み飛ばします。 ただしデコードはしません。ヘッダーの先で映像が壊れていないか、音が無音か、エンコーダーが実際に出したビットレートがいくつかは分からず、コンテナが自分について何と言っているかだけを示します。

使い方

  1. .mp4、.m4a、.m4v、.mov をボックスにドロップします。ヘッダーのボックスしか読まないので、数ギガバイトの動画も短いクリップと同じ速さで開きます。
  2. まずファストスタートの行を見ます。いいえなら、ブラウザーは 1 秒再生するにもファイル全体を取得しなければなりません。公開前に moov を先頭へ移して再多重化してください。
  3. プレーヤーが再生を拒むときはメジャーブランドと互換ブランドを確認します。"qt " は QuickTime 互換しか主張しないファイルで、ウェブのプレーヤーが期待するのは "isom" や "mp42" です。
  4. トラックの欄でコーデック、そのトラック固有のタイムスケールと長さ、画面サイズやサンプリング周波数を確認します。長さをタイムスケールで割れば秒になり、計算が見えるよう両方を並べています。
  5. ボックスツリーで想定より大きいものを探します。小さいファイルではカバー画像や残った free ボックスが驚くほどの割合を占めることがあり、割合の列がそれを可視化します。

よくある質問

ファストスタートは何を変えるのですか。そうでないファイルはどう直しますか。
moov ボックスは索引です。ファイル内すべてのサンプルのサイズ、時刻、バイトオフセットがここに載っています。プレーヤーは何かをデコードする前にこれを必要とするので、マルチプレクサが既定で行うとおり moov が mdat の後ろに書かれると、HTTP でストリーミングするブラウザーは最初のフレームを描く前にファイル全体を落とすか、レンジリクエストで moov を探し回ることになります。moov を先頭へ移すのはメディアを一切変えない純粋な並べ替えで、ffmpeg の -movflags +faststart や qt-faststart 系のツールが行います。moov が動くと stco や co64 のチャンクオフセットがすべてずれるため、単なるコピーではなく書き直しになります。
なぜ長さが二つの数の割り算として表示されるのですか。
ISO ベースメディアファイルは時間をティックで保持し、ヘッダーごとに 1 秒が何ティックかを示すタイムスケールを持っています。ムービーヘッダーはよく 600 や 1000 を使い、映像トラックは 15 fps なら 15360 のようにフレームレートで割り切れる値を、音声トラックはほぼ必ずサンプリング周波数そのもの、つまり 44100 や 48000 を使います。44032 という値は単独では無意味で、44.1 kHz の音声なら 1 秒、600 ティックのムービー時計なら 73 秒です。答えだけでなく割り算を見せると丸めも見えます。6 秒のはずのファイルが 5.98 秒と報告される典型的な原因は、トラックの長さがムービーのティックの整数倍でないことです。
作成日時が 1904 年や未設定になります。壊れているのでしょうか。
いいえ。ISO BMFF は QuickTime の紀元を受け継いでおり、それは 1904 年 1 月 1 日 UTC の午前 0 時です。そして多くのマルチプレクサはこの欄をそもそも埋めません。ffmpeg は既定で 0 を書き、0 はまさに紀元そのものです。つまり 1904 年に作られたように見えるファイルは、実際には作成時刻を言わないことにしたツールが作ったファイルです。値が入っていてもタイムゾーン情報はどこにもないので撮影地は分かりませんし、簡単に書き換えられるため、それ単体では何の証拠にもなりません。
フラグメント化されたファイルはなぜサンプルが無いように見えるのですか。
DASH や fMP4 の HLS、そして突然の終了に耐える必要のある録画が使うフラグメント化 MP4 は、moov にトラック定義と「断片が続く」という意味の mvex ボックスだけを置き、実際のサンプルはファイル各所に散った moof ボックスとその直後の mdat で記述します。したがって moov 内のサンプルテーブルが空なのは正常で、ヘッダーを書いた時点では分からなかったためムービーの長さもたいてい 0 です。誰かが記録していれば総時間は mvex/mehd にあります。フラグメント化されたファイルはどこで切ってもそこまで再生できるのに、通常のプログレッシブ MP4 ではそうならない理由もこの構造にあります。
MP4、M4A、M4V、MOV、3GP がどれもここで開くのはなぜですか。
同じ形式だからです。ISO/IEC 14496-12 がボックス構造を定め、ファイル先頭の ftyp ボックスがメジャーブランドと互換ブランドの一覧を宣言します。"M4A " は Apple 流の音声専用、"M4V" はそこに Apple の映像の慣習を足したもの、"qt " は他のすべての祖先である本来の QuickTime 配置、"3gp4" はモバイル向けプロファイル、ウェブのプレーヤーが探す汎用ブランドは "isom" や "mp42" です。拡張子は OS へのヒントにすぎず、実際の宣言はブランドの一覧で、両者が食い違うことは珍しくないので、再生できないときに最初に見る場所になります。
このツールでファイルを修復したり moov の位置を変えたりできますか。
できません。読むだけで、しかも意図的に最小限しか読みません。ファイルを切り出しながらボックスのヘッダーだけをたどるので mdat はメモリーに載らず、非常に大きな動画も小さなファイルと同じ速さで検査できます。何もアップロードせず、何も書き戻しません。ボックスがファイルより大きいサイズを主張しているというエラーでツリーが途中で止まる場合、たいていは転送中に切れたかダウンロードが中断されたファイルで、直す方法はヘッダーの編集ではなく残った断片からの再多重化です。

関連ツール

WebP ファイル検査ツール

.webp の RIFF チャンクをブラウザーで辿ります。非可逆・可逆・拡張の判別、キャンバスとフレームサイズの比較、アニメーションの時間、アルファ、ICC、Exif、XMP を表示します。

ファイル 0 0

GIF 構造インスペクター

GIF のブロック構造をそのまま読み、フレーム遅延と廃棄方法、ループ設定、パレット、透過、フレームごとの実バイト数を表示します。

画像 0 0

STL 3D モデル インスペクタ(三角形・体積・バウンディングボックス・ベッド適合)

.stl ファイル(バイナリまたは ASCII)をドロップすると、三角形数・バウンディングボックス・X×Y×Z サイズ・体積・表面積・水密性チェック・3 方向直交プレビュー・主要 3D プリンタベッド(Bambu・Prusa・Voron・Ender)適合可否を即時表示。

ファイル 0 0

フォルダーツリー視覚化

インデントされたファイルとフォルダー名のリストを貼り付けて、きれいな ASCII ツリーを取得 — README に貼り付けるようなもの。

テキスト 0 0

期間フォーマッター

期間を人間向け("1h 30m")・時計(1:30:00)・ISO 8601(PT1H30M)・秒/分/時/日 間で変換。

時間 0 0

Mbox アーカイブビューア

mbox アーカイブをブラウザーで分割。メッセージ境界、デコード済みヘッダー、MIME 構造、スレッド、重複 Message-ID を表示し、アップロードはしません。

ファイル 0 0