HEIF ファイル形式
High Efficiency Image Format。HEIF コンテナの汎用静止画プロファイル。
- MIME タイプ
- image/heif
- 拡張子
- .heif
- カテゴリ
- 画像
マジックナンバー(ファイル署名)
| 0x00000004 | 66747970 | ftyp | ISO-BMFF 'ftyp' box |
| 0x00000008 | 6D696631 | mif1 | brand 'mif1' |
HEIF 形式について
HEIF は HEIC が使うコンテナの汎用静止画プロファイルで、画像シーケンスや補助データも保持できます。ftyp ブランドは mif1 です。このブランドの肝は、何を言っていないかにあります。heic や avif と違って、中の絵をどのコーデックで圧縮したかについて一切主張しません。mif1 ファイルが約束しているのは構造だけです。meta ボックスがあること、画像がアイテムとして入っていること、primary アイテムが指名されていること。コーデックはその後、各アイテムの型と属性から判明します。mif1 がそれ自体メジャーブランドでありながら、ほぼすべての HEIC と AVIF の互換ブランド一覧にも顔を出すのは、そのためです。
ヘッダーの構造(バイト単位)
| オフセット | 長さ | フィールド | 意味 |
|---|---|---|---|
| 0 | 4 | ftyp box size | ファイルタイプボックスのバイト長をビッグエンディアンで表したもので、このフィールド自体を含みます。メジャーブランド 1 つと互換ブランド 2 つなら 24 です。ISO-BMFF ファイルの整数はすべてビッグエンディアンで、2 つの特別なサイズもここでも同じです。1 なら型の後ろに 64 ビット長が続き、0 ならボックスはファイル末尾まで伸びます。 |
| 4 | 4 | Box type | 66 74 79 70。ファイルタイプボックスは先頭に来ることが要求されているので、これがこの形式で唯一確実に固定されたフィールドです。HEIC・AVIF・MP4・MOV・3GP とそのまま共有しているため、これだけではコンテナのファミリーを絞れる以上のことは何も分かりません。 |
| 8 | 4 | Major brand | 静止画または画像コレクションなら 6D 69 66 31。画像シーケンス側の対応物は msf1 で、時間軸のあるコンテンツと、それに伴う別の構造要件を示します。どちらのブランドもコーデック名を出しません。それが HEIF を HEIC や AVIF から分ける、意図的な設計判断です。 |
| 12 | 4 | Minor version | 参考情報で、慣例的に全部ゼロバイトです。構造上の意味はなく、これを根拠にファイルを拒否することはリーダーに許されていません。 |
| 16 | variable | Compatible brands | 1 ブランドあたり 4 バイトで、ボックスの残りを埋めます。mif1 ファイルが実際に何を含んでいるかを教えてくれるのはここで、HEVC アイテムなら heic、AV1 アイテムなら avif、相互運用プロファイルなら miaf が並びます。リーダーはこのリストの中に理解できるブランドがあれば、それを根拠にファイルを開いて構いません。 |
| 24 | 4 | Next box size | 24 バイトの ftyp の後で、次のボックスヘッダが始まる位置です。ファイル全体は各ボックスのサイズを現在位置に足しながら走査します。中央の索引はなく、長さを 1 つ間違えたあとに再同期する手段もありません。 |
| 28 | 4 | Next box type | 通常は 6D 65 74 61、つまり meta で、これがファイルをムービーではなく画像ファイルにしています。実際の仕事をするのはその子ボックスたちです。pitm が primary アイテムを指名し、iinf がアイテムと 4 文字のコーデック型を列挙し、iloc が各アイテムのバイト位置を記録し、iprp が寸法・回転・色情報を結び付けます。 |
似た形式との見分け方
| 紛らわしい形式 | 見分け方 |
|---|---|
| HEIC | オフセット 8 の 4 バイトだけで決まります。68 65 69 63 なら、アイテムが HEVC だと主張しているファイル。6D 69 66 31 なら、構造が HEIF 画像ファイルであることしか主張していません。実際には、メジャーが mif1 で互換ブランドに heic を持つファイルは、メジャーが heic のファイルとまったく同じ HEVC データを抱えています。変換ツールはメジャーブランドだけで分岐せず、両方のリストを読むべきです。 |
| AVIF | 本当に厄介です。AVIF ファイルは互換ブランドに mif1 を並べるからで、macOS が作った AVIF はオフセット 8 が avif、オフセット 20 が mif1 になります。ftyp ボックス全体を走査して mif1 を探す検出器は、大半の AVIF を HEIF とラベル付けしてしまいます。ファイルが第一に何を名乗っているかを言うのはオフセット 8 のメジャーブランドだけで、実際に使われているコーデックを言うのは meta ボックス内のアイテム型、AV1 なら av01、HEVC なら hvc1 です。 |
| Image sequences | 静止画のブランドが mif1、シーケンスのブランドが msf1 で、1 バイト違いです。msf1 のファイルは時間軸を持つ画像を抱え、アイテムと並んでトラック構造を持つことも多く、静止画しか想定していないソフトウェアは 1 フレーム目を描いて止まります。どちらも .heif という拡張子で書かれるのが普通なので、拡張子はまったく助けになりません。 |
| MP4 | オフセット 4 は同一で、オフセット 8 が違います。動画なら isom・mp42・avc1、画像なら mif1 です。構造での判定はトップレベルのボックスが何かで、アイテムを持つ meta ボックスなら絵、trak ボックスを持つ moov ならムービーです。画像シーケンスを運ぶ HEIF は、正当に両方を持ちうる点にも注意してください。 |
よくある壊れ方
- リーダーが持っていないコーデック。ブランドがコーデック非依存なので、mif1 ファイルが開けたところで中身をデコードできる保証にはまったくなりません。AV1 アイテムを抱えた HEIF は HEVC しか実装していないソフトウェアで失敗し、その逆も起きます。壊れたファイルのように見えて実体は機能の欠落で、オフセット 16 の互換ブランドを読めば見つかります。
- 途中切れ。meta ボックスは通常画像データより前にあるので、アイテムの寸法と属性はそのまま残り、それが指しているバイトだけが消えます。リーダーは正しいサイズを報告して何も描かないか、埋め込みサムネイルのアイテムにフォールバックして、原寸で開くまで動いているように見せます。
- ボックスサイズがペイロードと合っていない場合。走査は長さを足していくだけなので、サイズが 1 つ狂うとパーサは任意のデータをボックスヘッダとして読み、そこで諦めます。エラーメッセージはたまたま着地した 4 バイトの名前を挙げるので、実際の破損場所の近くであることはめったにありません。
- アイテムの位置がファイルの外を指している場合。iloc ボックスは各アイテムのオフセットと長さを独立に記録するので、雑なツールが組み立てたり編集したりしたファイルは、サムネイルは完璧に読めるのに primary アイテムだけ末尾より先から始まっている、という状態になりえます。結果はプレビューは正しく出るのに開けないファイルです。
- primary アイテムが宣言されていない場合。pitm ボックスがないと、リーダーは複数のアイテムのどれが絵なのかを推測するしかなく、実装ごとに推測が割れます。写真を出すものもあれば、深度マップやアルファ補助画像を出すものもあります。バイトはすべて正しく、ファイルはただ別のものとして表示されます。
この形式の現在地
HEIF をそれ自体のブランドとして目にするのは、たいていコーデックを決め打ちせずにコンテナだけ使いたいツールの出力で、この上に築かれた 2 つの名前付きプロファイルに比べれば実際に出会う機会はずっと少なめです。本当に重要なのは設計上の位置づけです。HEIC も AVIF も HEIF ファイルであり、今のスマートフォン写真を成り立たせている仕組み、つまり 1 ファイルに複数画像、深度マップ、アルファ補助画像、HDR ゲインマップ、サムネイル、非破壊の編集リスト、バーストのシーケンス、そして再エンコードなしに他のアイテムを切り抜いたり回転したりして作る派生画像は、どちらか一方ではなくここで定義されています。素の mif1 ファイルが実際に登場するのは、画像処理パイプライン内の交換形式や中間形式として、そしてバーストやスタックのように、関連する多数の絵を 1 つに収められること自体が使う理由になる画像コレクションの場面です。配信には向きません。mif1 しか名乗らないファイルを開けるブラウザはありませんし、ウェブに出すものは AVIF・WebP・JPEG のいずれかであるべきです。ブランドは構造についての表明だと考え、中身を知るには互換ブランドとアイテム型を見て、出荷前に変換してください。
HEIF ファイルをこのサイトで開く
どれもブラウザ内で動きます。ファイルが端末から出ることはありません。
関連する形式
HEIF と混同しやすい形式です。先頭バイトを見比べてください。