ByteScope

HEIC ファイル形式

High Efficiency Image Container。iOS 11 以降の Apple 標準の写真形式。

MIME タイプ
image/heic
拡張子
.heic
カテゴリ
画像

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

0x0000000466747970ftypISO-BMFF 'ftyp' box
0x0000000868656963heicbrand 'heic'

HEIC 形式について

HEIC は HEVC で圧縮した静止画を HEIF コンテナに収めたもので、JPEG に比べて写真のサイズをおよそ半分にします。ISO-BMFF ファイルで、ftyp ブランドは heic です。ただし iPhone から届くものが 1 枚の絵であることはめったにありません。同じファイルがサムネイル、深度マップ、HDR ゲインマップ、そして編集内容を非破壊で記録したリストと手つかずのオリジナルを日常的に一緒に運んでいて、それらはすべてファイル前方の meta ボックスが索引する別々のアイテムです。JPEG との本当の違いはそこにあります。HEIC は小さな画像データベースであり、ビューアがどれを表示するかは、どのアイテムを primary と判断するかで決まります。

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

オフセット長さフィールド意味
04ftyp box sizeファイルタイプボックスの長さをビッグエンディアンで表したもので、メジャーブランド 1 つと互換ブランド 2 つなら 24 になります。ISO-BMFF の整数はすべてビッグエンディアンです。特別な値はコンテナのどこでも同じで、1 なら型の後ろに 64 ビットのサイズが続き、0 ならボックスはファイル末尾まで伸びます。
44Box type66 74 79 70。ファイルタイプボックスは必ず先頭に来るので、この 4 バイトが形式全体で唯一本当に固定された位置です。そして AVIF・HEIF・MP4・MOV・3GP と区別なく共有されています。
84Major brandMain プロファイルの HEVC 静止画 1 枚なら 68 65 69 63。派生ブランドが変種をカバーしていて、Main 10 以上のプロファイルなら heix、画像シーケンスなら hevc と hevx、マルチビューなら heim・heis・hevm・hevs です。どれも HEVC で、会話の中ではどれも HEIC と呼ばれます。
124Minor version参考情報のみで、慣例的に 00 00 00 00 です。ブランドの改訂番号ではありませんし、ここに予期しない値が入っていることを理由にファイルを拒否してはいけません。
16variableCompatible brandsボックスの残りを埋める 4 バイトブランドのリストです。macOS は heic と mif1 を書き、iPhone はたいてい mif1・heic・miaf と、MiHB や MiHE のようなコーディング制約ブランドを書きます。リーダーは認識できるブランドが 1 つでもあればファイルを開いてよく、だからこそここに mif1 があってもそのファイルが HEIF になるわけではありません。
244Next box size24 バイトの ftyp の後に続くものの、ヘッダです。ボックスは各サイズを現在のオフセットに足しながらたどるだけで、他の索引も再同期の仕組みもないので、長さが 1 つ狂えばそれ以降がすべて失われます。
284Next box typeほぼ必ず 6D 65 74 61、つまり meta です。その中では pitm ボックスが primary アイテムを指名し、iinf が全アイテムを型付きで列挙し、iloc が各アイテムのバイト範囲を与え、iprp が寸法や回転を含む属性を保持します。ビューアが何を表示するか決めるのに必要なものは、すべてそこにあります。

似た形式との見分け方

紛らわしい形式見分け方
AVIFオフセット 7 までバイト単位で同一で、そこからオフセット 8 が 68 65 69 63 か 61 76 69 66 かで分かれます。構造としては meta とアイテムの仕組みまで含めて同じコンテナで、違いはアイテムデータを圧縮したコーデックが HEVC か AV1 かという点だけです。そしてその違いがファイルの開ける場所を決めます。HEIC には HEVC デコーダと特許ライセンスが要り、AVIF には要りません。Safari 以外のブラウザは HEIC を描画しません。
HEIFここでもオフセット 8 のメジャーブランドです。heic はアイテムが HEVC であることを明確に主張し、mif1 はコーデックに依存しないブランドで、画像ファイルの構造に従っていることしか主張しません。ほぼすべての HEIC が互換ブランドにも mif1 を並べているので、ボックス内のどこかにある mif1 を拾うのは、HEIC ファイルを汎用の HEIF と報告してしまう典型的な検出器のバグです。
QuickTime MovieLive Photo は .heic の静止画と、同じコンテンツ識別子を持つ .mov の動画という組で届き、どちらもボックスサイズに続いて ftyp で始まります。分けるのはオフセット 8 のブランドで、heic か qt かです。そして MOV はサンプルを持つ trak ボックスを、HEIC は meta ボックス内のアイテムを持ちます。Live Photo が普通の静止画として届くことが多いのは、この組の片方しかコピーされていないからです。
JPEGオフセット 0 が FF D8 FF か、たいていは 00 00 00 18 になるボックス長かの違いです。その選択の裏にあるカメラ設定はトグル 1 つで、高効率なら HEIC、互換性優先なら JPEG を撮ります。Apple の転送経路は Windows マシンへ出す途中で HEIC を JPEG に変換もするので、同じ写真がコピーの仕方によってどちらの形式でも届きうるわけです。

よくある壊れ方

  • HEVC デコーダが無いだけなのに壊れたファイルだと思われるケース。Windows で HEIC を開くには別途コーデック拡張のインストールが必要ですし、ほとんどのブラウザは今後も開けません。Apple のハードウェア以外ではどこでもエラーになるファイルは、まず間違いなく無傷です。修復を試す前に、オフセット 4 が ftyp、オフセット 8 が heic と読めることを確認してください。
  • 途中切れ。meta ボックスは前のほうにあるので、寸法・向き・アイテム一覧は残り、欠けるのは画像データだけです。ビューアの反応はばらばらで、埋め込みサムネイルという別の、ずっと小さいアイテムを表示してしまうものもあり、原寸で開くまでファイルが無事に見えてしまいます。
  • 表示されるアイテムが違うケース。HEIC は複数の画像を抱えていて、pitm ボックスが primary を指名します。pitm を無視して最初に見つけたアイテムをデコードするソフトウェアは、ユーザーが期待している絵ではなく深度マップやサムネイル、未編集のオリジナルを表示することがあります。破損に見えますが、リーダーのバグです。
  • 変換で編集が失われるケース。iOS は調整内容を補助アイテムと手つかずのオリジナルという形で非破壊に保存するので、それを適用せずに primary アイテムだけ取り出す変換ツールを通すと、技術的には正しいのにすべての編集前の状態の写真が写ったファイルができます。そうなったことを警告するものは何もありません。
  • ボックスサイズが中身と合っていないケース。走査はボックスツリー上のポインタ演算の繰り返しでしかないので、長さが 1 つ狂うとパーサはペイロードをボックスヘッダとして読み、以降のファイルを放棄します。報告されるエラーは、たいてい実際の破損場所から遠いボックスの名前を挙げてきます。

この形式の現在地

HEIC は 2017 年の iOS 11 以降すべての iPhone で、そして以後は多くの Android フラッグシップでも既定の撮影形式なので、これで publish する人はほとんどいないのに、生産量で言えば地球上で最も多く作られている画像形式のひとつです。同画質なら JPEG のおよそ半分のサイズで、JPEG が構造的に持ちえないものを運びます。10 ビット深度、アルファチャンネル、ポートレートのぼかし用の深度マップ、バーストや Live Photo のシーケンス、HDR ゲインマップ、非破壊の編集履歴です。これがウェブの形式になれなかった理由はライセンスでした。HEVC の特許は複数の保有者にまたがってプールされており、ブラウザベンダはデコーダの同梱を見送り、今日に至るまで描画できるのは Safari だけです。その空白を、同じコンテナでロイヤリティフリーのコーデックを使って埋めるために生まれたのが AVIF です。実務上の位置づけは、HEIC は撮影と保管の形式であり、その 2 つはとても得意で、Apple のエコシステムから出るものはすべて変換される、というものです。互換性を最大化したいなら JPEG、ウェブなら AVIF か WebP へ。Apple 自身のカメラ設定にある互換性優先は、そもそも HEIC を望んでいなかった人がその変換を要らなくするために存在しています。

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

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

関連する形式

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

形式先頭バイト拡張子
HEIF66 74 79 70.heif
AVIF66 74 79 70.avif
JPEGFF D8 FF.jpg
MP466 74 79 70.mp4

よくある質問

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

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

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