HEIF
HEIF って何?
- MPEG 規格で静止画データを格納するコンテナ仕様。
- コンテナ形式的には JPEG2000 の後継で ISOBMF(QuickTimeの後継)。
- 最近の動画コーデック H.265/HEVC のキーフレームを入れる事で、ISOBMF の柔軟性と HEVC の高圧縮を併せもち、将来的に JPEG を倒し得る技術的ポテンシャルを手に入れた。
- Apple が iOS11 / macOS High Sierra で対応。推進してる。
- Nokia が開発。Apple が iOS11 / macOS High Sierra で対応、普及推進してる。
拡張子
- *.HEIC です。
- 中身が H.265/HEVC である事を示します、
- なお同じ HEIF コンテナで H.264/AVC を入れる場合は、*.AVCI
- その他のコーデックだと .HEIF です。(具体例ないですが)
何がすごいの?
- 画質とファイルサイズのパフォーマンスがすごい
- 同じ位の画質で JPEG の半分位までサイズが減る圧縮率
- ブロックノイズが出ない?(画質落として実験しよう)
- ロスレス(劣化しない圧縮)と透明度に対応してるので PNG の代わりになり得る。
- ただし、YUV444 対応しないと RGB=>YUV変換で微妙に劣化する
- ただし、YUV444 と RGB 色空間対応(デフォルトではYUV)の実装が必要。
- アニメーションもできるので GIF の代わりにも?。(ブラウザのインライン表示対応するのだろうか。。)
- HDR、Deep Dolor 対応。
- 但し macOS, iOS は最低ラインの main profile 辺りなので Deep Color 未対応。
- YUV 444 対応(WebPはYUV420だけ)。これも macOS は YUV420 と 400(グレースケール)のみ。。ベータ版で一時期 444,420 表示できた気がするけど。。
- HDR、Deep Color 対応。
- 但し macOS/iOS は最低ラインの main profile 辺りなので Deep Color 未対応。
- YUV 444 対応(WebPはYUV420だけ)。これも macOS/iOS は YUV420 と 400(グレースケール)のみ。。ベータ版で一時期 444,420 表示できた気がするけど。。
- ピクセルデータに沿った別のデータをつけられる
- 透明度とか。
- カメラからの距離、Depth も対応。iPhone だと画像認識で深さを推測してる (と思われる)
- 表示する際の回転やクリップを定義できる。(回転は JPEG でも Exif orientation がありましたね)
- タイル上にバラした画像として格納できる。
- 一部クリップする時に最小限のタイルだけ読めば良くて便利。
- iPhone カメラで撮影するとそうなる。
- Exif メタデータや ICC プロファイルも入れられる (実例作れる?)
- H264 とおなじく H.265 もハードウェアエンコーダが積まれれば H/W で処理できるようになる。
- iPhone7 の A10 Fusion chip、iPhone8 の A11 Bionic chip なら H/W エンコードできるはず。
- iPhone6、SE の A9 chip でもデコードならいける。
- ソフトウェアデコードできるので遅くて良いなら 5s の A7 chip でも多分いける。
- iPhone5, 5c 以下は iOS11 対象外なので駄目です。
どこで表示できるの?
- iOS 11 / macOS High Sierra から標準ビューアで見られる。
- でも、Safari 含めてブラウザは駄目。
- 今のところ保存形式は HEIF、一般ユーザが画像を取り出すと JPEG という流れ。
- 勿論、HEIF (拡張子は *.HEIC) のまま取り出せます。
- どうやって HEIF 形式で画像ファイルを取り出すの?
- iOS で設定>写真>「元のフォーマットのまま」を選択。又はカメラ>フォーマット>高効率(古いマイナーバージョン?)
- 標準アプリのカメラとか HEIF 対応アプリで撮影。
- macOS の写真アプリのオリジナル書き出し。
サンプル画像ある?
この辺りからどうぞ。
但し、iPhone が出力するコンテナ構造は、このどれとも違うので注意。
どうやって作るの?
- iOS の API CGImage〜 を使っても良いですが。
- JPEG/PNG から H.265/HEVC
- FFmpeg 、または x265 、または libde265
- H.265/HEVC から HEIF
- MP4Box、または公式の nokiatech heif ライブラリ。
パラメータ。
バイナリの実際
- iPhone が出力するバイナリ
- nokiatech の出力するバイナリ (未検証)
自力でバイナリ作って見た
IO_HEIF とか。許可が出れば社内で作ってるのとか。
知見
- H.265/HEVC に引きずられる部分がある。
- 最小ブロック以下はエンコード出来ない。64x64 未満だと駄目。
- クロマサブサンプリングで 420 だと width, height 偶数じゃないと駄目。(奇数だとエラー)
- これらは、HEIF コンテナの crop 機能で対応できるかも?
- macOS, iOS が 恐らく、最低ラインの main プロファイルしか対応出来てない?
- グレースケール(YUV400) と YUV 420 だけ。(一時期、マイナーバージョンアップで 444 表示出来た事があるような。。)
- 8bit しか多分駄目。10bit や 12bit 16bit は?
- 色空間指定も多分駄目。(JPEG の YUV データをそのまま放り込んで彩度が合わない時期があったので、一時期対応してたかも。)
ライセンスの話は?
- 匂わすだけで、具体的には話さないかも。話せないかも。
参考資料
- Working with HEIF and HEVC
- High Efficiency Image File Format
- Capturing Depth in iPhone Photography
- Technical information
- LASSE HEIKKILÄ HIGH EFFICIENCY IMAGE FILE FORMAT IMPLEMENTATION
- Overview of the High Efficiency Image File Format
- iOSDC2017「新しい画像フォーマットHEIFを 用いたiOSアプリの通信量削減」のまとめと補足
- WWDC17で新しく発表された画像フォーマットHEIFを使ってみた
- 「HEIF」「HEVC」っておいしいの? iOS 11で変わった画像・動画形式を知る
- 最新の画像フォーマット「HEIF」について知っていますか?【JPEGの代替にはなるのか…】
- iPhoneが作成するHEIFフォーマットの概要(※おもいでばこチーム独自解析結果)
- iPhoneの新写真フォーマット「HEIF」に「おもいでばこ」が対応した理由と変わらない体験
最近のトピック
ImageMagick
そろそろ対応しそう(な雰囲気)
AV1 対応
その他