履歴もしくは日誌
2010 年 5 月の履歴(もしくは日誌)
2010 年 5 月
5 月 28 日
Eye-Fi Pro X2 は RAW ファイルには Geotag を付加しない
Eye-Fi Pro X2 を買いました! Eye-Fi は無線 LAN 内蔵の SD カードです.デジタルカメラで撮影した画像を順次無線 LAN で転送できます.特に Eye-Fi Pro X2 は RAW ファイルに対応しているのでデジタル一眼レフにも使えます.さらに位置情報(geotag)を扱う事ができます.でも GPS を内蔵しているのではなくて無線 LAN を使って位置情報を得ます.
ぼくの理解では,撮影時に近くの無線 LAN アクセスポイントの情報を記録.カメラから無線 LAN で画像を転送するときにインターネット経由で撮影時の無線 LAN アクセスポイントの情報から位置情報を得て,画像ファイル保存時に EXIF に位置情報を書き込むという仕組み.
この位置情報ですが,なんと JPEG には書き込まれますが RAW には書き込まれません! Eye-Fi Pro X2 はそういう仕様です.
だから撮影時にはカメラの設定で RAW と同時に JPEG も保存するようにしておいて,後から JPEG の位置情報を RAW にコピーする必要があります.そういう話しが forums.eye.fi にありました.
ここで Nikon の RAW ファイルである NEF に対して Mac で処理するというシェルスクリプトが紹介されていました.ぼくは Nikon D40 と MacBook の組み合わせなのでばっちりです.find . -name *.JPG だとうまく行かなかったので '*.JPG' とクォートしました.
これを実行するには exiv2 というコマンドが必要です.MacPorts からもインストールできますし,http://www.exiv2.org/ からソースをダウンロードして Mac でビルドするのも簡単でした.
この処理をしてから Aperture に読み込めば良いわけです.いいですね.
2010-05-09 chregu http://forums.eye.fi/viewtopic.php?f=3&t=1148#p8932
#!/bin/bash for j in `find . -name '*.JPG'` do FILE=`echo $j | cut -f 2 -d "." ` FILE=".$FILE" if [ -f $FILE.NEF ] then echo $FILE IFS=$'\n' A=` exiv2 -Pkyv $FILE.JPG | grep GPSInfo` echo -n "" > meta.txt for i in $A do echo "set $i" >> meta.txt done exiv2 -m meta.txt $FILE.NEF mv $FILE.JPG ./oldjpegs/ fi done
I found the original shell script in Eye-Fi Forums. It reads geotag from JPEG and writes the geotag into NEF. I added NRW handling to the script.
でもぼくは Nikon COOLPIX P6000 も持っています.こっちは GPS 内蔵ですが GPS を使ってうまく位置情報が付かない場合も多いのです.電源を入れた直後とか建物の中とか.だから内蔵 GPS で位置情報が得られなかったときは Eye-Fi Pro X2 でっていうのは良さそうです.
てな訳で先のシェルスクリプトを参考に自分でも書いてみました.今回はシェルスクリプトを参考にしたので Perl で書かずにシェルスクリプトで書きました.
COOLPIX P6000 で RAW と JPEG を同時に保存すると D40 の用に同じファイル名で拡張子だけが違うファイルで保存されるのではなくて,RAW と JPEG で別々のファイル名で保存されちゃいます.それに対応してついでに Aperture でも扱いやすいように D40 のような命名規則になるようにリネームしちゃいます.そして P6000 の RAW は NEF ではなくて NRW です.
タイムスタンプで同じ時刻なのを確認して RAW 側には位置情報が書き込まれていないのを確認してから JPEG の位置情報を RAW に書き込むようにしました.
#!/bin/bash
# 2010-05-09 chregu http://forums.eye.fi/viewtopic.php?f=3&t=1148#p8932
# 2010-05-27 onohiroki@cup.com http://onohiroki.cycling.jp/
for file in `find . \( -name '*.NEF' -or -name '*.NRW' \) | LC_ALL=C sort`
do
tag=''
file=${file%.*}
if [ -w $file.NRW ]; then
t1=` exiv2 -Pkyv $file.NRW 2>/dev/null | grep -a Exif.Photo.DateTimeOriginal `
nrwf=${file%%[0123456789]*}
nrwn=` expr ${file#*DSCN} + 1 `
nrwj=`printf "%s%04d.JPG" $nrwf $nrwn`
gpslat=` exiv2 -Pkyv $file.NRW 2>/dev/null | grep -a 'GPSInfo.GPSLatitude ' | awk '{print $3 $4 $5}' `
gpslon=` exiv2 -Pkyv $file.NRW 2>/dev/null | grep -a 'GPSInfo.GPSLongitude ' | awk '{print $3 $4 $5}' `
if [ "$gpslat" != '0/00/00/0' ] && [ "$gpslon" != '0/00/00/0' ]; then
tag='Geotag'
elif [ -f $nrwj ]; then
t2=` exiv2 -Pkyv $nrwj 2>/dev/null | grep -a Exif.Photo.DateTimeOriginal `
if [ "$t1" = "$t2" ]; then
IFS=$'\n'
geometa=` exiv2 -Pkyv $nrwj 2>/dev/null | grep -a GPSInfo `
echo -n "" > meta.txt
for i in $geometa
do
echo "set $i" >> meta.txt
done
exiv2 -m meta.txt $file.NRW
tag='+Geotag'
if [ ! -f $file.JPG ]
then
#mv $nrwj ./oldjpegs/
mv $nrwj $file.JPG;
fi
fi
fi
elif [ -w $file.NEF ]; then
t1=` exiv2 -Pkyv $file.NEF | grep Exif.Photo.DateTimeOriginal `
geometa=` exiv2 -Pkyv $file.NEF 2>/dev/null | grep -a GPSInfo `
if [ -n "$geometa" ]; then
tag='Geotag'
elif [ -f $file.JPG ]; then
t2=` exiv2 -Pkyv $file.NEF | grep Exif.Photo.DateTimeOriginal `
if [ "$t1" = "$t2" ]; then
IFS=$'\n'
geotag=` exiv2 -Pkyv $file.JPG | grep GPSInfo `
echo -n "" > meta.txt
for i in $geotag
do
echo "set $i" >> meta.txt
done
exiv2 -m meta.txt $file.NEF
tag='+Geotag'
#mv $file.JPG ./oldjpegs/
fi
fi
fi
printf "%s %s\n" $file $tag
done
Permalink Trackback URI http://onohiroki.cycling.jp/tb/tb.cgi/weblog_d20100528n1 TrackBack