HEICとは何か、HEICとJPEGのどちらを残すべきか
スマホが.heicで保存するけど、ノートPCでは何も開けない。これは何で、そもそも必要なの?
HEICという名前の意味
HEICは一般にHigh Efficiency Image Containerの略とされています。.heicという拡張子はHEIF系の画像ファイルを示し、その中身は通常HEVCで符号化されたピクセルです。日常的には、iPhoneの写真ファイルを指してHEICと呼ばれます。実際にはHEIFがコンテナの規格で、その中の圧縮コーデックがたいていHEVCなのですが。
この区別が、.heicを.jpgに変えても写真が変換されない理由を説明します。拡張子はただのラベルにすぎず、ソフトウェアが中に見つけるのは相変わらずHEIFの構造とHEVCで圧縮された画像データです。本当の変換とは、それらのピクセルをデコードし、新しいJPEG、PNG、WebPのファイルとしてエンコードすることです。
HEICはコーデックではなくコンテナ
.heicファイルはHEIFファイル、すなわちISO/IEC 23008-12として標準化されたHigh Efficiency Image File Formatです。HEIFは、MP4が使うのと同じISOベースメディアファイル構造の上に築かれたコンテナです。画像、サムネイル、深度マップ、画像シーケンス、メタデータをファイル内にどう配置するかを定めていますが、ピクセルをどう符号化するかは定めていません。
iPhoneが作るファイルでは、ピクセルはHEVC、別名H.265で符号化されています。これはITU-T H.265として標準化された動画コーデックです。この形式の利点も問題も、そこから来ています。実質的には、写真を現代の動画コーデックの1フレームとして保存しているわけです。
スマートフォンがこの形式を選んだ理由
HEVCには、1992年の設計であるJPEGにはないフレーム内予測の仕組みがあり、同じ見た目の品質なら必要なビット数は一般に少なくて済みます。スマートフォンのストレージには限りがある一方、写真ライブラリには限りがないので、この節約は端末メーカーにとって実際の金額に直結します。またこのコンテナは、1つのファイルに関連する複数の画像を収められます。連写のコマ、Live Photoの静止画と短い動画、アルファチャンネルや深度チャンネルなどを、フォルダに散らばらせずに済むわけです。
人によってはサイズ以上に重要な利点がもう1つあります。HEIFは1チャンネルあたり8ビットを超える精度に対応しています。10ビットの画像はグラデーションの余裕がはるかに大きく、そのため空や肌の色は、8ビットのJPEGの場合より編集に耐えます。
他のソフトウェアが開けない理由
HEVCは特許のあるコーデックで、デコーダーにはライセンス上の義務が伴います。これは技術上の事実ではなく法的・商業的な事実であり、対応がまちまちである主な理由です。デコーダーを標準搭載しているOSもあれば、ハードウェアデコーダーがある場合にだけ搭載するOSもあり、HEICをデコードできるブラウザもあれば、できないブラウザもあります。撮影したスマートフォンなら一瞬で開くファイルが、3メートル先のマシンでは読めないということが起こります。
FileSlimmerがHEICのデコードは行う一方、書き出しは決して行わないのはこのためです。変換はあなたのブラウザ内で実行され、プラットフォームのデコーダーがあればそれを、なければ自前でホストしているWebAssemblyのデコーダーを使います。出力はJPEG、PNG、WebPのいずれか、つまり受け取る側のソフトウェアが実際に開ける形式です。
HEICとJPEGを率直に比べる
| 項目 | HEIC(HEVCを収めたHEIF) | JPEG |
|---|---|---|
| 同程度の品質でのサイズ | たいてい小さい | たいてい大きい |
| ビット深度 | 1チャンネルあたり8ビットまたは10ビット | 1チャンネルあたり8ビット |
| 透過 | 対応 | 非対応 |
| 1ファイルに複数の画像 | 対応 | 非対応 |
| 見知らぬソフトウェアで開けるか | 開けないことが多い | ほぼ常に開ける |
| ライセンス | 特許のあるコーデック | 事実上、制約なし |
HEICファイルが隠し持っているかもしれないもの
コンテナが複数のものをまとめて収められるため、1つの.heicには目に見える写真以上のものが入っていることがあります。Live Photoは静止画と一緒に短い画像シーケンスを持ちます。ポートレート撮影では深度マップが含まれることがあります。連写では多数のコマが含まれ、そのうち1つが主画像として指定されています。JPEGへ変換すると1枚の平坦な画像になるので、コンテナが主画像と一緒に運んでいたものは出力には残りません。
向きについては別に触れておく価値があります。HEICは、JPEGとまったく同じように回転をメタデータとして記録します。これを無視する変換ツールは、横倒しの写真を作ります。FileSlimmerは変換時に記録された向きをピクセルに反映するので、JPEGはスマートフォンで表示されていたとおりの見た目になります。
では、どのコピーを残すべきか
- HEICを読める環境の中だけで使い続けるなら、そしてライブラリの小ささと余分なビット深度に価値を感じるなら、HEICを原本として残します。
- 外へ送るものはJPEGに変換します。アップロードフォーム、プリントサービス、メールの添付、何を使っているか分からない同僚などです。
- PNGへの変換は、編集のために可逆の出力が必要な場合だけにします。ファイルは他の2つよりかなり大きくなります。
- そのHEICが唯一の原本なら、JPEGへ変換したうえでHEICを削除するのはやめてください。この変換は、すでに非可逆な画像をさらに非可逆に再エンコードする処理です。
変換する前に知っておくべき制約
変換は2回目の非可逆圧縮なので、高い設定でもわずかに品質が失われます。ブラウザがHEVCをまったくデコードできず、なおかつ自前でホストしている予備のデコーダーも特定の派生に対応できない場合、たとえば珍しいプロファイル、破損したファイル、同じコンテナに入ったHEVC以外のコーデックといった場合には、変換は誤った結果を出すのではなく失敗します。FileSlimmerはどのファイルがなぜ失敗したかを報告し、元のファイルには手を付けません。
そもそもこの問題に付き合いたくないなら、たいていのスマートフォンのカメラには、撮影をJPEGに戻す互換性設定があります。ストレージと引き換えに、誰にでもファイルを渡せるようになります。
この作業に使えるツール
出典
- ISO/IEC 23008-12 — High Efficiency Image File Format
- ITU-T H.265 — High Efficiency Video Coding
- Nokia Technologies — HEIF technical overview