Exifデータの編集

HDRを作成するとき、Exifに埋め込まれた絞りとISO感度、露光時間を参照している。実際には、jpeg2hdrgenというコマンドでExifデータを抜き出している。

$ jpeg2hdrgen *.JPG

IMG_0634.JPG 1666.67 4.0 200 0
IMG_0635.JPG 833.333 4.0 200 0
IMG_0636.JPG 1666.67 4.0 200 0
IMG_0637.JPG 400 4.0 200 0
IMG_0638.JPG 1666.67 4.0 200 0
IMG_0639.JPG 200 4.0 200 0
IMG_0641.JPG 100 4.0 200 0
IMG_0643.JPG 50 4.0 200 0
IMG_0645.JPG 25 4.0 200 0


よく見て欲しい。1 EVステップでブラケット撮影したにも拘らず、露光時間が1/1600で頭打ちされている。実際の絵はきちんと暗くなって居るので、Exifデータが間違っている、もしくは、jpeg2hdrgenがしくじっている、ということだ。Exifデータを検証してみる。

$ exiftool -a IMG_0636.JPG | grep 'Exposure Time'

Exposure Time                   : 1/1600
Target Exposure Time            : 1/1614
Exposure Time                   : 1/3228


居た居た、こいつだ。一番上は所謂「呼び」の露光時間、一番下が実際の露光時間だ。この値でExifデータを書き換えてやれば良いはずだ。こんな感じで書き換えてやる。

$ for f in *.JPG; do \
>   et=`exiftool -a ${f} | \
>     grep '^Exposure Time' | \
>     sed 's/.* //'`; \
>   et=`echo $et | sed 's/.*\s//'`; \
>   exiftool -EXIF:ExposureTime=$et -overwrite_original_in_place ${f}; \
> done

$ jpeg2hdrgen *.JPG

IMG_0634.JPG 1666.67 4.0 200 0
IMG_0635.JPG 833.333 4.0 200 0
IMG_0636.JPG 3333.33 4.0 200 0
IMG_0637.JPG 400 4.0 200 0
IMG_0638.JPG 5000 4.0 200 0
IMG_0639.JPG 200 4.0 200 0
IMG_0641.JPG 101.01 4.0 200 0
IMG_0643.JPG 50 4.0 200 0
IMG_0645.JPG 25 4.0 200 0

$ exiftool -a IMG_0636.JPG | grep 'Exposure Time'

Exposure Time                   : 1/3228
Target Exposure Time            : 1/1614
Exposure Time                   : 1/3228


おかしいなあ。jpeg2hdrgenとexiftoolで抜いた露光時間が食い違っている。ま、そもそも露光時間のタグが複数あって、しかも同じ名前のタグが存在し得るとかゆうExifの謎で糞な仕様が招いた混乱だ。これでやってみて具合が悪かったらまた考えよう。

ついでに言えば、光学というかカメラ界隈の用語は綺麗に統一されていないとか、不思議なものが多い。矢鱈と無次元化したがるのも困り者だ。恐らく、幾何光学という分野の歴史が古く、学者でない人たちの関わりも深かったため、現場用語と学術用語でゴタゴタしてるんだと思う。それを整理しないまま、そういう用語の上にソフトウェアを実装しちゃった感じがする。

ちなみに、私のカメラ、Canon S95で使用できる露光時間は1/1600秒までなのだが、ロシアンファームを使うともっと短い露光が出来る。