写真のEXIFを抽出してCSVにする
- たくさんの写真のEXIF情報から、必要な情報(シャッタースピード、F値、ISO感度)だけ抜き出して一覧化したい。
- テキストデータを出力し、後に集計やグラフ化を行いたい。(自分が撮影する写真の傾向などがわかって面白いかもしれない)
と思うことがあったので、試してみた。環境はMac OS X(10.8.5)。
1. ImageMagickのインストール
pkgが配布されているので、それを使用する。
ImageMagick installer for Mac OS X
/opt/ImageMagick配下にインストールされる。環境変数PATHの設定は自動でされないので、必要であれば自分でやる。今回は見送った。
2. identifyの使用
ImageMagickには「identify」というツールが含まれていて、メタデータなどが参照できる。
$ /opt/ImageMagick/bin/identify -verbose XXXXXXXX.JPG Format: JPEG (Joint Photographic Experts Group JFIF format) Mime type: image/jpeg Class: DirectClass Geometry: 2560x1920+0+0 Resolution: 350x350 Print size: 7.31429x5.48571 Units: PixelsPerInch Type: TrueColor Endianess: Undefined Colorspace: sRGB Depth: 8-bit …
このうち、今回欲しいEXIF情報は下記3つ。
シャッタースピード | exif:ExposureTime |
---|---|
F値 | exif:FNumber |
ISO感度 | exif:ISOSpeedRatings |
なので、下記コマンドで(ファイル名と)必要な情報のみ抜き出して表示する。
$ /opt/ImageMagick/bin/identify -format "%[filename], %[Exif:ExposureTime], %[Exif:FNumber], %[Exif:ISOSpeedRatings]\n" XXXXXXXX.JPG
3. バッチ化
指定したフォルダ内の写真ファイルすべてに対して処理を行わせる。lsとxargsの組み合わせかなと思ったが、xargsはファイルへのリダイレクトに対応していないらしいので、forで実現。私が使うカメラ(OLYMPUS E-M1)が出力するJpegは、拡張子が大文字で「JPG」なので、*.JPGで抽出。
$ for file in `ls *.JPG`; do /opt/ImageMagick/bin/identify -format "%[filename], %[Exif:ExposureTime], %[Exif:FNumber], %[Exif:ISOSpeedRatings]\n" $file >> exif.csv; done