rubyでexif

デジカメ1台の時は、ファイル名でソートしていれば、
ほとんど困ってなかったんですが複数台のデジカメ
奥さんのデジカメ(IXY)と自分のデジカメ(xactiDSi)の写真を
同一ディレクトリで混ぜてリネームとかしたい場合に
色々ツールがあるとは思うんですが、使い方がよくわからなかったりしたので
Rubyのライブラリを使ってみました。


RubyEXIFライブラリはextexifというのがあったのですが
Ruby1.9.1でbuildできなかったので、exifrというのを使いました。


以下は写真を撮影順で連番ファイル名にリネームする場合とか(←奥さんの要望)
000.jpg,001.jpg,002.jpg... という感じになります。

require 'exifr'
include EXIFR

digit = 3 

# filelist = Dir["*.jpg","*.JPG"] # <= Ruby1.9.1 only
filelist = Dir["{*.jpg,*.JPG}"]

filelist.sort { |a,b|
  JPEG.new(a).exif[:date_time_original] <=> \
  JPEG.new(b).exif[:date_time_original]
}.each_with_index { |file,num|
  File.rename(file,"%0#{digit}d.jpg" % num )
}


非常にシンプルに書けますね。


ここまで書いて思ったのですが、デジカメのEXIF情報って
デジカメの時計の情報が書かれるので、デジカメの時計が合っていないと微妙です。
旅行に行く時は各デジカメの時計を合わせましょう。