MP4のメタデータを読むコツ
メタデータ部は、Boxの階層構造になっている。
1. Boxの始まりを見つける
データはBox単位で書かれるので、まずバイナリの右側から4文字のアルファベットを探す。
場合によってはBox Header部のtypeではなく文字列 Data である可能性もあるが、
.......$hoge..... みたいな感じになっていたら間違いなくtypeだと思っていい。
2. Box Typeの前の4バイトを見る
ここにサイズが書いてある
Data部のバイトサイズを知りたいならここの値を10進数に変換して8を引く
3. Data部を頭の中で認識する
Box Typeの次のバイトからがData部である
Data部の最初の8バイトを見て、 ....hoge みたいなのが書いてたら、Data部には子Boxが入っていると考えて頭を切り替える
2.で得たバイトサイズからData部の終わりを見つける
速くData部の終わりを見つけたいときは、1行真下に行くと +16バイトであることを活用する
100以上あるなら、Data部の末端のアドレスを計算したほうが簡単だと思われる
★ ビットイメージを活用する
mp4 ファイルのビットイメージは、次の画像のようになる
https://scrapbox.io/files/641a7adcb9a956001b7184e9.png
1ドットがバイト、1行に128バイト。
白
0x00(NULL)
水色
0x01~0x19(Ascii制御文字) -> 0x1Fじゃないかな?
赤
0x20~0x7F(Ascii文字)
ウィンドウ上部で、赤が4ドット横に並んだ部分はtypeだろう
黒
0x80~0xFF(黒って何?)
Asciiコードでないことは間違いないな
赤が密集してたらそれは文字情報を含んでいると考えられそう
一番上の赤が連続している箇所には、文字列情報が中心となる、Sbtl boxより前の Boxが並んでいます。
moov - sbtl - stss boxから規則的に線が並ぶようになります。
stss box の次にある、stsc boxから水色の線と赤色の線が混じるようになります。
https://scrapbox.io/files/641a9e3f3cd2d1001cd87e07.png
下にスクロールすると線が一瞬太くなる箇所があります。
ここは co64 Boxのバイトでした。
そして、その下から再び赤が横に連続しています。
これは再び Trak Box が始まったことを意味します。
ここを境に、MP4の音声トラック情報が書かれています。
そして再び線が一瞬太くなります。
これも co64 Box で、このデータでは各 Trak Box の末端に位置していました。
そしてその下に並んでいるのは mdat Boxです。人間が読める情報はほとんどないでしょう。