ByteScope

3GP ファイル形式

3GPP のマルチメディアコンテナ。携帯電話向けに設計されました。

MIME タイプ
video/3gpp
拡張子
.3gp
カテゴリ
動画

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

0x0000000466747970ftypISO-BMFF 'ftyp' box
0x00000008336770343gp4brand '3gp4' (or '3gp5')

3GP 形式について

3GP は 3rd Generation Partnership Project が携帯端末向けに定めたマルチメディアコンテナで、3GPP TS 26.244 が ISO base media file format の制限プロファイルとして規定しています。構造としては MP4 そのものです。同じボックス、同じビッグエンディアンのサイズ、先頭に同じ FileTypeBox。仕様が加えているのは制限のほうで、許されるコーデックが短いリストに絞られています。映像は主に H.263、MPEG-4 Part 2、のちに H.264、音声は AMR-NB、AMR-WB、AAC。数メガバイトの RAM しかなく専用回路もほぼ無い電話機で録画・再生できるように選ばれたものです。ファイルは小さく、解像度は今の基準では極小で、この形式は主に古いカメラロールとフィーチャーフォンで録った音声の中に生き残っています。

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

オフセット長さフィールド意味
04ftyp box sizeFileTypeBox の長さをビッグエンディアンで表したもので、この 4 バイトを数えます。00 00 00 20 なら 32 で、メジャーブランド、マイナーバージョン、互換ブランド 3 つが入ります。後続のボックスを見つける確実な手段は、この値だけです。
44Box type 'ftyp'66 74 79 70。ファイル先頭のボックスであることが要求されています。ISO base media 派生はどれもここに置くので、これがあることで絞れるのはそのファミリーまでで、それ以上ではありません。
84Major brand33 67 70 に ASCII の数字が続きます。3gp4、3gp5、3gp6 とそれ以降の改訂があり、それぞれ TS 26.244 のリリースに対応します。この数字が、中にどのコーデックがあるかについてファイルが述べている、最も近い手がかりです。
124Minor version書き手が対象とした仕様リリースを載せるビッグエンディアンの 32 ビット値です。ffmpeg が作る 3gp6 ファイルはここに 00 00 01 00 を持ちます。このファミリーの他のマイナーバージョンと同じく参考情報で、この値を理由にファイルを拒否するのはバグです。
16variableCompatible brandsボックスの終わりまで 1 ブランド 4 バイトで並び、たいていメジャーブランドの繰り返しに isom、iso2、avc1 が続きます。ここに isom が並んでいるのは、汎用の MP4 リーダーで対処できるとファイルが言っているということで、拡張子が別なので身構えるよりずっと高い確率で本当です。
328Second box headerftyp の後ろのボックスのサイズと型で、moov・mdat・プレースホルダの free のいずれかです。このオフセットが成り立つのは ftyp が 32 バイトのときで、互換ブランドの一覧に応じて前後します。

似た形式との見分け方

紛らわしい形式見分け方
MP4オフセット 8 のブランドがすべてです。isom や mp42 ではなく 3gp4・3gp5・3gp6 になります。3GP ファイルはどれも正しい MP4 なので MP4 リーダーで再生できますが、逆は成り立ちません。H.265・VP9・AC-3 を運ぶ MP4 は、ボックスが文句なく解析できたとしても 3GPP のコーデック制限を破っています。
3G23GPP2 が CDMA 網向けにほぼ同一のコンテナを定めており、違いはオフセット 8 のブランドが 3g2a か 3g2b であることと、拡張子が .3g2 であることだけです。主な追加点は QCELP と EVRC の音声コーデックへの対応で、そのエコシステムの外ではどれもデコードできません。それ以外はまったく同じ配置です。
AMR3GP は、その中身としてよく運ばれる生の音声形式と混同されがちです。素の AMR ファイルはそもそもコンテナではありません。ASCII のヘッダ行 23 21 41 4D 52 0A、つまり #!AMR と改行から始まり、そのあとは生の音声フレームです。3GP の中では同じ音声がきちんとしたトラックになっていて、サンプルエントリは samr、この種のヘッダはファイルのどこにもありません。
M4Aオフセット 8 のブランドが M4A で、ISO のボックスツリーは同じです。音声のみの 3GP ファイルは実在しますし珍しくもありません。古い端末のボイスメモがそれです。したがって拡張子からは映像の有無が分かりません。分かるのは各トラックの hdlr ハンドラ型で、絵なら vide、音なら soun です。

よくある壊れ方

  • 電池切れで打ち切られた録画。端末はサンプルを mdat に書き、録画を止めたときに moov 索引を追記するので、撮影中に電源が落ちた電話は、音声も映像も全部あるのに再生する手立てが無いファイルを残します。復旧は、同じ端末・同じ設定で録った別のクリップからサンプルテーブルの構造を移植することになります。
  • もうデコードできないコーデック。多くの 3GP ファイルは H.263 の映像と AMR-NB の音声を抱えていますが、今どきのプレイヤーは静かにその両方を切り捨てました。ファイルは完全に無傷で、ボックスもきれいに歩けて、それでも再生は失敗します。破損に見えますがコーデックの入手性の問題で、修復ではなくトランスコードで解決します。
  • 端末から取り出す途中での切断。ヘッダは先頭 32 バイトに収まっているので必ず生き残り、中身の大半が欠けたファイルでもファイル形式判定は平然と 3GP と報告します。露見するのはボックスサイズを歩いたときで、最後のボックスが存在しないバイト数を約束しています。
  • remux でブランドが失われた場合。FileTypeBox を書き換えるツールでストリームをコピーすると、オフセット 8 のバイトが isom になります。メディアには何も起きず再生も以前どおりですが、3GP ブランドで振り分けているものからは別の形式に見えます。
  • ヘッダの手前のゴミ。HTML のエラーページを前に付けたまま保存された途中ダウンロードは、ftyp をオフセット 4 から押し出します。moov ボックス内のチャンクオフセットはすべてファイル先頭からの距離なので、先頭のバイトは読み飛ばすのではなく削除しなければなりません。

この形式の現在地

3GP には明確な役目がありました。おおよそ 2002 年から 2010 年にかけての、携帯電話でのビデオメッセージとカメラ録画です。そして端末が H.264 で直接 MP4 に録れるほど良くなった時点で、その役目自体が消えました。新しく作られることはもうありません。今も出てくるのはアーカイブの中で、古い MMS の添付、フィーチャーフォンのカメラロール、ボイスメモ、そして電話機が先に進んだあとも古いエンコーダチップを使い続けるほど安価だった監視カメラやドライブレコーダーです。そのどれについても、正しい対処は H.264 と AAC の MP4 へ一度トランスコードすることです。問題はコンテナではなく H.263 と AMR-NB のほうで、これらのデコーダを積むプレイヤーは年々減っています。3GP に残る本物の利点はサイズです。AMR-NB の音声録音は 1 秒あたり数キロバイトで、汎用コーデックが出せる水準をはるかに下回ります。

3GP ファイルをこのサイトで開く

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

関連する形式

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

形式先頭バイト拡張子
MP466 74 79 70.mp4
M4A66 74 79 70.m4a

よくある質問

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

ファイル先頭の数バイトで、名前が何であろうとその形式を示すものです。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 でも悪意のあるペイロードを含んでいることがあります。特に拡張子とバイト列が食い違うときに真の形式を知るのは有用な第一段階ですが、マルウェアスキャンではありません。

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