3GP ファイル形式
3GPP のマルチメディアコンテナ。携帯電話向けに設計されました。
- MIME タイプ
- video/3gpp
- 拡張子
- .3gp
- カテゴリ
- 動画
マジックナンバー(ファイル署名)
| 0x00000004 | 66747970 | ftyp | ISO-BMFF 'ftyp' box |
| 0x00000008 | 33677034 | 3gp4 | brand '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 しかなく専用回路もほぼ無い電話機で録画・再生できるように選ばれたものです。ファイルは小さく、解像度は今の基準では極小で、この形式は主に古いカメラロールとフィーチャーフォンで録った音声の中に生き残っています。
ヘッダーの構造(バイト単位)
| オフセット | 長さ | フィールド | 意味 |
|---|---|---|---|
| 0 | 4 | ftyp box size | FileTypeBox の長さをビッグエンディアンで表したもので、この 4 バイトを数えます。00 00 00 20 なら 32 で、メジャーブランド、マイナーバージョン、互換ブランド 3 つが入ります。後続のボックスを見つける確実な手段は、この値だけです。 |
| 4 | 4 | Box type 'ftyp' | 66 74 79 70。ファイル先頭のボックスであることが要求されています。ISO base media 派生はどれもここに置くので、これがあることで絞れるのはそのファミリーまでで、それ以上ではありません。 |
| 8 | 4 | Major brand | 33 67 70 に ASCII の数字が続きます。3gp4、3gp5、3gp6 とそれ以降の改訂があり、それぞれ TS 26.244 のリリースに対応します。この数字が、中にどのコーデックがあるかについてファイルが述べている、最も近い手がかりです。 |
| 12 | 4 | Minor version | 書き手が対象とした仕様リリースを載せるビッグエンディアンの 32 ビット値です。ffmpeg が作る 3gp6 ファイルはここに 00 00 01 00 を持ちます。このファミリーの他のマイナーバージョンと同じく参考情報で、この値を理由にファイルを拒否するのはバグです。 |
| 16 | variable | Compatible brands | ボックスの終わりまで 1 ブランド 4 バイトで並び、たいていメジャーブランドの繰り返しに isom、iso2、avc1 が続きます。ここに isom が並んでいるのは、汎用の MP4 リーダーで対処できるとファイルが言っているということで、拡張子が別なので身構えるよりずっと高い確率で本当です。 |
| 32 | 8 | Second box header | ftyp の後ろのボックスのサイズと型で、moov・mdat・プレースホルダの free のいずれかです。このオフセットが成り立つのは ftyp が 32 バイトのときで、互換ブランドの一覧に応じて前後します。 |
似た形式との見分け方
| 紛らわしい形式 | 見分け方 |
|---|---|
| MP4 | オフセット 8 のブランドがすべてです。isom や mp42 ではなく 3gp4・3gp5・3gp6 になります。3GP ファイルはどれも正しい MP4 なので MP4 リーダーで再生できますが、逆は成り立ちません。H.265・VP9・AC-3 を運ぶ MP4 は、ボックスが文句なく解析できたとしても 3GPP のコーデック制限を破っています。 |
| 3G2 | 3GPP2 が CDMA 網向けにほぼ同一のコンテナを定めており、違いはオフセット 8 のブランドが 3g2a か 3g2b であることと、拡張子が .3g2 であることだけです。主な追加点は QCELP と EVRC の音声コーデックへの対応で、そのエコシステムの外ではどれもデコードできません。それ以外はまったく同じ配置です。 |
| AMR | 3GP は、その中身としてよく運ばれる生の音声形式と混同されがちです。素の 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 と混同しやすい形式です。先頭バイトを見比べてください。