ByteScope

AVIF ファイル形式

AV1 Image File Format。AV1 動画コーデックをベースにした最新の静止画形式。

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

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

0x0000000466747970ftypISO-BMFF 'ftyp' box
0x0000000861766966avifbrand 'avif'

AVIF 形式について

AVIF は AV1 動画コーデックを静止画に適用したもので、HDR と広色域に対応しながら非常に高い圧縮率を実現します。MP4 と同じ ISO-BMFF ファイルで、オフセット 4 の ftyp ボックスがブランド avif を持ちます。この最初のボックスから先は位置が固定されているものが何ひとつありません。ISO-BMFF は、それぞれが自分のサイズと 4 文字の型で始まるボックスの木構造だからです。AVIF の絵はトラックではなく meta ボックスの中のアイテムとして格納されていて、同じコンテナを共有する動画ファイルと静止画を分けているのは、まさにこの点です。

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

オフセット長さフィールド意味
04ftyp box sizeファイルタイプボックスの長さをビッグエンディアンで表したもので、この 4 バイト自体を含みます。ブランド 1 つと互換ブランド 2 つなら 00 00 00 18、つまり 24 が一般的です。RIFF 系と違って ISO-BMFF の数値はすべてビッグエンディアンです。サイズが 1 なら型の後ろに 64 ビットの長さが続き、0 ならボックスはファイル末尾まで伸びます。
44Box type66 74 79 70、ASCII の ftyp。ファイルタイプボックスは先頭に置くことが要求されているので、他に固定位置を持つものが何もないこの形式でも、オフセット 4 だけは当てにできます。このバイト範囲は AVIF・HEIC・HEIF・MP4・MOV・3GP が等しく共有しています。
84Major brand静止画なら 61 76 69 66。画像シーケンスとアニメーション AVIF は代わりに 61 76 69 73、つまり avis を使うので、アニメーションと静止画はここで 1 バイトしか違わないのに、デコードの仕方は大きく異なります。
124Minor version解析には影響しない参考情報で、ほぼ必ず 00 00 00 00 です。ブランドのバージョンではありませんし、この値を理由にファイルを拒否することはどのリーダーにも許されていません。
16variableCompatible brands4 バイトずつ並び、ボックスの残りを埋めます。24 バイトの ftyp ならちょうど 2 つ入ります。macOS が作ったファイルは avif と mif1 を並べ、ウェブ用エンコーダのファイルは miaf と MA1B のようなコーディング制約ブランドを足すことがよくあります。リーダーはこのリストのどれか 1 つでも認識できればファイルを開いてよく、メジャーブランドだけでは決め手にならないのはそのためです。
244Next box size24 バイトの ftyp の直後から、次のボックスヘッダが始まります。ボックスは各サイズを現在位置に足しながら歩くので、ここのサイズが 1 つ狂うと以降のファイルすべてを失います。ISO-BMFF には再同期の仕組みがどこにもありません。
284Next box typeたいていは 6D 65 74 61、つまり meta で、これを静止画ファイルたらしめているアイテム一覧・アイテム属性・アイテム位置を保持するボックスです。代わりに trak ボックスが見つかったなら、拡張子が何であれ中身は動画です。

似た形式との見分け方

紛らわしい形式見分け方
HEIC同じコンテナ、同じ先頭 8 バイトで、決め手はオフセット 8 の 4 バイトだけです。61 76 69 66 なら AV1 符号化、68 65 69 63 なら HEVC 符号化。実務上の違いは構造ではなくライセンスにあり、今のブラウザはどれも AVIF をデコードできて、HEIC は Safari 以外どれもデコードできません。圧縮された画像データが別コーデックである以上、remux をどれだけ重ねても一方が他方に変わることはありません。
HEIF見た目より厄介です。AVIF ファイルは互換ブランドに mif1 を並べているからです。macOS が作った AVIF はオフセット 8 が avif で、オフセット 20 が mif1 なので、ftyp ボックス内のどこかにある mif1 を拾う検出器はこれを HEIF と呼びます。ファイルが第一に何を名乗っているかを決めるのは、オフセット 8 のメジャーブランドだけです。
MP4オフセット 4 は同一で、違うのはオフセット 8 のブランドだけです。動画なら isom・mp42・avc1・dash、画像なら avif か avis。より深い判定は構造で、静止画は絵を meta ボックス配下のアイテムとして格納し、動画は trak ボックスが記述するサンプルとして格納します。avis のシーケンスは、その境界を意図的にぼかす存在です。
WebP52 49 46 46 と 4 バイトのボックス長なので、バイトレベルで紛れることはありません。picture 要素の同じ枠を奪い合う関係で、トレードオフは一貫しています。AVIF は同画質の WebP より 20〜50 パーセント小さく、エンコードには 1 桁長い時間がかかります。

よくある壊れ方

  • 途中切れ。寸法とアイテム属性を運ぶ meta ボックスはたいてい前のほうにあるので、デコーダは画像サイズを平然と報告したうえで画素を 1 つも見つけられません。タイル化された画像なら最初のタイルだけ、ということもあります。mdat ボックスが切れているためです。無事な AVIF は最後のボックスがちょうどファイル末尾で終わるので、そこを確認してください。
  • ボックスサイズの誤り。ボックスはサイズを足しながら歩くので、長さが 1 つ狂うとパーサは別のボックスのペイロードの真ん中に着地し、任意の 4 バイトを型として読みます。バイトはすべて残っているのに破損箇所より後ろのボックスは全滅し、そのときのエラーはまったく無関係なボックスが壊れているように見えます。
  • 画像シーケンスを静止画として保存した場合。avis ブランドのファイルは複数フレームを持ちますが、静止画 AVIF しか実装していないソフトウェアは 1 枚目を描いて成功を報告します。壊れてはいません。他のフレームが単に出てこないだけで、表示された絵に対してファイルサイズだけが説明のつかない大きさに見えます。
  • 色関連の属性が欠けているか誤っている場合。AVIF は色域プライマリ・伝達関数・マトリクスをアイテム属性として持ちますが、変換ツールがそれを落とすとデコーダは推測するしかなくなります。HDR 画像は構造的には正しいまま、色あせた、あるいは過飽和の SDR として描かれます。AVIF があるブラウザでおかしく見えて別のブラウザで正しく見えるのは、これが原因です。
  • ソフトウェアがファイルに対して古すぎる場合。AVIF がブラウザに来たのは 2020〜2022 年で、デスクトップやサーバのソフトウェアにはいまだデコードできないものが山ほどあります。Chrome で開けて他では全滅するファイルは、たいてい壊れていません。オフセット 4 が ftyp、オフセット 8 が avif と読めることを確認すれば破損は除外できます。

この形式の現在地

AVIF は、ブラウザ対応が本当に広い形式のなかで最も圧縮率が高いものです。Chrome は 2020 年、Firefox は 2021 年、Safari は 2022 年から使えるので、picture 要素とフォールバックをすでに配っているサイトの写真コンテンツなら既定にして構いません。同画質の JPEG に対しておおむね半分のバイト数、WebP に対して 20〜50 パーセント削れます。加えて、古い形式にはそもそも無い機能を持ち込みます。チャンネルあたり 10 ビットと 12 ビット、HDR の伝達関数、広色域、フィルムグレイン合成、アルファ、アニメーションが 1 つのコンテナに収まります。代償はエンコード時間で、JPEG の 1〜2 桁上になります。スマートフォンやブラウザのアップロード経路でその場で作る形式ではなく、ビルドステップか CDN の形式ということです。ブラウザの外の対応はまだまだで、デスクトップのエディタ、メールクライアント、古い Android には開けないものが多くあります。ファイルとして人に手渡すには、まだ安全な形式とは言えません。現実的な構成は、大手サイトの多くが実際にそうしているように、picture 要素で AVIF を第一、WebP を第二、JPEG を最後に置くことです。

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

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

関連する形式

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

形式先頭バイト拡張子
HEIC66 74 79 70.heic
WebP52 49 46 46.webp
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 でも悪意のあるペイロードを含んでいることがあります。特に拡張子とバイト列が食い違うときに真の形式を知るのは有用な第一段階ですが、マルウェアスキャンではありません。

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