写真容量の削減方法
前提条件
主にNikonで撮影した写真10万枚ほどをNASに保存しているのだが、そろそろHDD容量が不足しそうであり、なおかつHDD市況が悪い(とても高い)ため、時間稼ぎを試みるべく削減容量を検討する。
保存方法は原則としてNikonカメラの撮って出しJPEG(NORMAL) + 圧縮NEFの組合せで、その後Darktableで現像を行い現像に必要なメタデータ.NEF.xmpと現像したJPEGファイル(品質90)を保存する、という流れで行われる。数値を出す写真データは京都旅行の324枚の撮影データで、撮影機材はうち171枚がZ7、153枚がD850で撮影されたもの。撮って出しJPEGが3.7G、RAW(NEF)が19GBの計22GB。現像のデータはJPEGが70枚1.2GB、メタデータは3.8MBでメタデータは誤差といえる範囲。以後人による違いが大きいため現像したJPEGとメタデータは原則として含めないが、現像したJEPGに対する削減の場合は注釈して入れることがある。
撮って出しJPEGを消す
| Before | After | % |
|---|---|---|
| 22G | 19G | -17% |
撮って出しのJPEGファイルを削除する。撮って出しJPEGはあまり使わないことが多く、必要なら以下の手法で生成が可能なので、問題は少ない。
NX Studioという公式の現像アプリを使う
厳密にはバージョンアップでバイナリレベルで差が出る可能性はあるが、色はかなり注意して寄せているとおもっている。
NEFファイルのヘッダに含まれるJPEGを抽出
NEFファイルのヘッダにはレビューに使われるJPEGファイルが含まれており、それを抽出すればそのまま撮って出しと同じ設定のJPEGが抽出できる。ただし撮って出しと同じとは限らないため、次で詳細に検討する。
NEFのヘッダから撮って出しJPEGを削除する
| Before | After | % |
|---|---|---|
| 19G | 17G | -10% |
NEFのヘッダにはZ7とD850の場合、4種類のJPEG画像が含まれており、それぞれ以下のような名前と容量のものが設定されている。
| name | byte |
|---|---|
| Jpg From Raw | 2461322 |
| Other Image | 687552 |
| Preview Image | 156821 |
| Thumbnail TIFF | 57816 |
なお、このデータはexiftoolを以下のように使うと抽出できる。
$ exiftool -a -G -ImageSize -preview:all _.NEF
Jpg From Rawはまさに撮って出しのデータ、Other Imageはカメラ内プレビュー用らしく1616x1080程度、Preview Imageは640x427でおそらくPCのエクスプローラなどで使う用、Thumbnail TIFFはEXIFの仕様で策定されたプレビュー規格。
これらのヘッダに含まれるJPG From RawとOther Imageを削減することによってさきほどの容量削減が可能になる。
この改変によって現像が不可能になったら困るので調査したところ、少なくともNX Studioの現像に問題なかった。撮って出しとヘッダのJPEG両方消しても問題なく撮って出しは復元可能なことがわかる。
現像したJEPGを削除する
| Before | After | % |
|---|---|---|
| 23G | 22G | -5% |
メタデータさえ残ってれば再度現像すればよい、それはそうで、特に自分の場合、現像のJPEGは撮って出しより画質が高いのもあって削減効果は無視できない。ただし現実問題として現像で出したJPEGは「作品」であり、一番需要が高いデータだと思っているところがあり、自分ならおそらく削除しない。
失敗写真を削除
実際のところ一番分かりやすく効くのはこのあたりなのだが、これをちゃんとやれてるなら10万枚にはならないし、今からそれをやるのは苦しいという話がある。
自動的にやるなら、ラプラシアン分散でボケ画像を検出して削除する、digiKam(無料)でImage Quality Scannerを使う、AIでカリングとかいう手もあるのだが、連写しないのでボケ写真がそんなない、精度があまり高くない、有料ソフトウェアを現像パイプラインに組込みたくない、という思想があって今回は試していない。連写が多い人なら試す価値はあるとおもう。
NEFを更に圧縮する
| Before | After | % | |
|---|---|---|---|
| zstd -15 | 17G | 16G | -2.3% |
| 独自 | 17G | 14G | -14% |
NEFファイルをそのままzstd -15で圧縮したのはさすがにあまり意味がなかったが、NEFファイルの中身を構造解析してRAWの部分だけ展開し直して別の圧縮かけなおした独自形式を作ってみたところ、15%ほど圧縮できた。意外とNEF形式(lossless)は圧縮率が低いらしい。もし無圧縮のRAW形式しか使えない古いカメラのRAW形式を使っている場合、zstdでもかなり効率的に圧縮できると思われるので、調べる価値はある。
まとめ
自分の環境では一旦4.7TBの写真データを撮って出しJPEGの削除で3.9TBまで削減できたので終わりとしたが、NEFを更に圧縮する手法が確立できたりして有意義だった。HDD相場が下がらなければまた一歩踏み込んで検討したい。