メモ置き場

いろんなメモを置いておく場所。自分用ですが、誰かの助けにもなるかも。

写真の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

そのディレクトリに「exif.csv」という名前で、見出しも何も無いCSVファイルができる。