ByteScope

QuickTime Movie ファイル形式

Apple QuickTime コンテナ。現在の MP4 の祖先にあたる形式。

MIME タイプ
video/quicktime
拡張子
.mov
カテゴリ
動画

マジックナンバー(ファイル署名)

0x0000000466747970ftypISO-BMFF 'ftyp' box
0x0000000871742020qt brand 'qt '

QuickTime Movie 形式について

MOV は Apple の QuickTime コンテナで、MP4 の直系の祖先です。ISO が ISO base media file format の出発点として QuickTime のファイル形式を採用したため、両者はボックス構造、ボックス名の大半、そして意味づけの多くを共有しています。今どきの QuickTime ファイルは、MP4 とまったく同じ FileTypeBox で自分を名乗り、そこに末尾スペース 2 つのブランド qt を載せます。このボックスが導入される前に書かれたファイルには、ヘッダのマジックがそもそもありません。いきなり最初の実ボックスから始まるので、MOV の検出器は PNG のように固定のバイト列ひとつには頼れないのです。MOV が MP4 と本当に違うのは、何を入れてよいかという点です。タイムコードトラック、ProRes や DNxHD の映像、再エンコードなしにトリミングや並べ替えを行う編集リスト、まったく別のファイルにあるメディアを指すリファレンスムービーなどが許されています。

ヘッダーの構造(バイト単位)

オフセット長さフィールド意味
04ftyp box sizeFileTypeBox の長さをビッグエンディアンで表したもので、この 4 バイトを含みます。00 00 00 14 は 20 で、実用上の最小サイズです。型、メジャーブランド、マイナーバージョン、互換ブランドちょうど 1 つが入ります。MP4 ファイルは互換ブランドを複数並べるので、ここはたいていもっと長くなります。
44Box type 'ftyp'66 74 79 70。すべての ISO base media ファイルが持つのと同じ FileTypeBox です。これがあること自体はどの形式かを何も語りません。語るのは続くブランドだけです。
84Major brand 'qt '71 74 20 20。q と t の後ろに ASCII のスペースが 2 つで、このスペースはブランドの一部であり、削ってよいパディングではありません。4 文字コードの末尾空白を落とすツールは非常に多く、そういうツールはこのブランドに一致できなくなります。
124Minor versionビッグエンディアンの 32 ビット数値で、参考情報のみです。ffmpeg はここに 00 00 02 00 を書き、Apple 自身の書き手はビルド日付のような値を入れます。どちらも制約ではなく、この値を理由にファイルを拒否すべきではありません。
16variableCompatible brandsボックスの残りで、1 ブランドあたり 4 バイト。QuickTime ファイルはたいてい qt をもう一度並べるだけです。MOV がここに isom や mp42 も並べているなら、中身が素の MP4 リーダーでも扱える範囲に収まっていると告げていることになります。
208Second box headerftyp が 20 バイトなら、ここが次のボックスです。QuickTime の出力ではこれが wide であることが非常に多く、これは 8 バイトのプレースホルダボックスで、後ろの mdat をファイルをずらさずに 64 ビットサイズへ昇格できるようにするためだけに存在します。それ以外なら moov・mdat・free のいずれかです。
44Legacy first box type2004 年より前の QuickTime ファイルには ftyp ボックスがなく、この同じ位置に最初の実ボックスの型が入ります。moov・mdat・free・skip・wide・pnot のいずれかです。オフセットは同じでも意味が違い、この曖昧さがあるために MOV の判定は厳密ではなく確度ベースになります。

似た形式との見分け方

紛らわしい形式見分け方
MP4オフセット 7 まで同一です。判定はオフセット 8 のメジャーブランドがすべてで、qt なら QuickTime、isom・iso2・mp41・mp42・avc1 なら MP4 です。ヘッダから先の本当の違いは中身のほうで、ProRes や DNxHD、タイムコードトラックを抱えた MOV は正当な QuickTime ですが、ボックスがきれいに解析できたところで一般的な MP4 プレイヤーがデコードできるものではありません。
M4Vオフセット 8 のブランドが qt ではなく M4V です。どちらも Apple のエコシステムから出てきて、どちらも H.264 と AAC を持つことが多いので、拡張子は中身ではなく出所を教えているに過ぎません。片方をもう片方にリネームして通ってしまう確率は本来あるべき水準よりずっと高く、通らなかったときに hex エディタを開く羽目になるのはそのためです。
AVI古い収録・編集ワークフローで今も見かけるもうひとつのコンテナで、構造はまるで似ていません。AVI は RIFF で、オフセット 0 が 52 49 46 46、オフセット 8 のフォームタイプが AVI です。そちらのサイズはリトルエンディアンで、QuickTime ファイルのサイズはすべてビッグエンディアンです。どちらを読んでいるのか自信がないときの、よい妥当性チェックになります。
3GPこちらも ftyp ボックスを持ち、ブランドは 3gp4・3gp5・3gp6 です。実務上の違いは範囲で、3GP はコーデックとボックスの使い方を携帯端末が処理できる範囲に絞るのに対し、QuickTime は意図的にその逆をやり、まったく別のファイルに置かれたメディアへの参照まで含めてほぼ何でも許します。

よくある壊れ方

  • moov ボックスが書かれないまま終わった録画。これが典型的な壊れた MOV です。電源を失ったカメラや画面収録ソフトは、全フレームを mdat に書いたところで索引を追記する前に死に、どのプレイヤーでも開けない数ギガバイトのファイルを残します。フレームはすべて残っていて復旧もできますが、同じ機器・同じ設定で撮った健全なファイルからサンプルテーブルの構造を借りてくるしかありません。
  • リファレンスムービーの参照先が移動した場合。QuickTime は MOV から他のファイルにあるサンプルを指せるので、映像を 1 バイトもコピーせずに編集を保存できます。元ファイルを移動したりリネームしたりしても MOV は完全に正しいままです。開けるし、正しい長さも表示するし、何も再生しません。破損に見えますが違います。
  • 途中切れ。ftyp ボックスは小さくて先頭にあるので、末尾がどれだけ失われてもヘッダは健全なままです。実際に教えてくれるのはボックスを歩くことで、最後のボックスがファイル末尾を超えるサイズを申告しています。
  • テキストモード転送、あるいはブランドが削られた場合。テキストだと思ったバイトを書き換える処理はどれも、オフセット 8 の qt ブランドにある ASCII スペース 2 つを削り落としかねません。そうなると、他はバイト単位で無傷のファイルを厳格なリーダーが拒否します。
  • 絵を隠してしまう編集リスト。壊れた、あるいは妙な書かれ方をした elst ボックスは、メディア末尾より先の位置から再生を始めさせることがあり、開けて再生時間も表示するのに真っ黒しか映らないファイルができあがります。デコーダではなくヘッダのレベルの問題で、単純な remux では直りません。

この形式の現在地

MOV が生きているのは配信側ではなく制作側です。Final Cut Pro と Avid はこれで作業し、ProRes と DNxHD はこれで配られ、Canon や Blackmagic、RED のカメラはこれで記録し、macOS の画面収録も既定では MOV です。そこを置き換えたものは何もありません。MP4 にできなくて MOV にできること、つまりタイムコードトラック、アルファチャンネル、巨大な中間コーデック、編集リスト、リファレンスムービーは、まさに編集ワークフローが必要とするものだからです。そのワークフローから出ていくものには向きません。H.264 か H.265 の MP4 ならどこでも再生できますし、ProRes の MOV は巨大なうえに大半のマシンではデコードすらできません。実際、MOV で始まるプロジェクトのほぼすべてが最後に MP4 へ書き出し、MOV はマスターとして手元に残ります。

QuickTime Movie ファイルをこのサイトで開く

どれもブラウザ内で動きます。ファイルが端末から出ることはありません。

関連する形式

QuickTime Movie と混同しやすい形式です。先頭バイトを見比べてください。

形式先頭バイト拡張子
MP466 74 79 70.mp4
M4V66 74 79 70.m4v
AVI52 49 46 46.avi

よくある質問

ファイルのマジックナンバーとは何ですか?

ファイル先頭の数バイトで、名前が何であろうとその形式を示すものです。PNG は必ず 89 50 4E 47 で始まり、ZIP は 50 4B 03 04 で始まります。OS もブラウザも file コマンドも、拡張子を信用せずこのバイト列を読みます。だからファイル名を変えても中身の正体は変わりません。

マジックナンバーを自分で確認する方法は?

macOS や Linux なら xxd -l 16 ファイル名 で先頭 16 バイトが表示されます。Windows なら PowerShell で Format-Hex -Path ファイル名 -Count 16 です。あるいはこのサイトのファイル形式判別ツールにドロップすれば、ローカルでバイト列を読んで形式を教えてくれます。アップロードはありません。

2 つの形式が同じマジックナンバーを持つのはなぜ?

一方が他方の上に作られているからです。docx、xlsx、pptx、apk、jar、epub はすべて中身が ZIP アーカイブなので ZIP の署名で始まり、区別するには内部のエントリを見る必要があります。Java の class ファイルと macOS のユニバーサルバイナリはどちらも CA FE BA BE で始まり、直後のフィールドで見分けます。

マジックナンバーがまったくないファイルもある?

あります。XML、HTML、JSON、SVG、CSV といったテキストベースの形式には固定のバイト署名がないため、構造から判別します。先頭の <?xml 宣言、<svg 要素、あるいは { に続く引用符付きのキーなどです。これは確定ではなく推測なので、このリファレンスではそうした形式をプローブ判別として示しています。

マジックナンバーが一致すればそのファイルは安全?

いいえ。わかるのは形式であって、中身が無害かどうかではありません。正規の PDF や docx でも悪意のあるペイロードを含んでいることがあります。特に拡張子とバイト列が食い違うときに真の形式を知るのは有用な第一段階ですが、マルウェアスキャンではありません。

QuickTime Movie かもしれないファイルをお持ちですか?ファイル形式判別ツールで調べる — マジックナンバーをローカルで読み取ります。アップロードは一切ありません。またはすべての形式を見る。