シャッターの作動回数(総レリーズ回数)を調べる

D40*1は、写真のExif情報にそれまでのシャッターの作動回数も記録されるそうである。つまり最新の写真を調べれば、今までに何回、シャッターが作動したかが分かるのである。

早速、iPhotoPreviewExif情報を漁ってみたが、それらしき項目は見当たらない...。Apertureでも見つからず...。こうなったら、exiftoolコマンドだ。

あった!121行目に「Shutter Count」なる項目が見つかる。

$ exiftool ~/Pictures/iPhoto\ Library/Originals/2011/ローパスフィルタの清掃後/DSC_1737.NEF
...(中略)...
Shutter Count                   : 6874
...(中略)...

つまり、このD40は、これまでに6874回シャッターが作動した、ということだろう。この写真まで、6874回撮影したのだ。

耐久性

この6874回という数字は、車で言えば総走行距離みたいなものだと思う。機械的に動作する部分には負荷や摩擦によってどうしてもストレスがかかる。それが繰り返されると、ある時点で壊れることになる。D40の寿命を判断する一つの目安となりそう。
で、6874回とはどんな感じなのか?ニコンのページを見ると、D90D3000・D3100で10万回、D7000で15万回だそうだ。

残念ながら、D40の耐久性に関する記載は見当たらなかった...。そこで勝手に予測して、5万回ずつ増えたと見ると、その前のD40は、10万-5万=5万回ぐらいか?

その後、上記ページを見つけて、データから以下の状況を読み取った。

  • 3万回なら95%近くのユーザーがまだ使えている。
  • 5万回では85%以上のユーザーがまだ使えている。

6784回なんて、まだまだ序の口。自分のペースなら、あと数年は余裕で使えそう。

総レリーズ回数を調べるAppleScript

  • exiftoolコマンドは強力で、ファイルパスを指定するだけで、あらゆるExif情報が表示される。
  • その数、何と!180項目。でも、その中から目指す Shutter Count を見つけるのは、結構しんどい...。
  • だから、grepコマンドで、フィルタリングしちゃう。
$ exiftool ~/Pictures/iPhoto\ Library/Originals/2011/ローパスフィルタの清掃後/DSC_1737.NEF | grep -i 'shutter count'
Shutter Count                   : 6874
  • しかし、数ヵ月後には、その項目が「Shutter Count」だったことさえも忘れ、また調べることになりそう。
  • それに、iPhotoで見ている写真の、オリジナルのファイルパスを素早く取得するのも面倒だし、忘れそう。
    • iPhotoで写真を右クリック、ファイルを表示(あるいはオリジナルのファイルを表示)、コピーして、ターミナルにペースト。
  • そこでお馴染みのAppleScriptにまとめておく。
  • ついでにExif情報もターミナルに表示するようにしてみた。


(* * Shutter Count(シャッター回数を調べる.scpt * 選択中の写真を撮影した時点のシャッターの累積動作回数を表示する
* ついでに、すべてのExif情報も表示する
* * exiftoolコマンドのインストールが必要
* ダウンロード:http://www.sno.phy.queensu.ca/~phil/exiftool/
*)
try
set exiftool to "`which exiftool` " & my selection_path() tell application "Terminal"
activate
do script exiftool
do shell script exiftool & "|grep -i 'shutter count'"
display dialog result buttons {"OK"} default button "OK" --giving up after 5
end tell
on error err_msg number err_num
if err_num = -1728 or err_num = -1700 then
activate
"写真が選択されていません。
FinderあるいはiPhotoで選択して、再度実行してください。"
display dialog result buttons {"OK"} default button "OK" --giving up after 5
else if err_msg = "0 以外の状況でコマンドが終了しました。" then
--何もしない
else
error err_msg number err_num
end if
end try

on selection_path() if frontmost_app() is "Finder" then
finder_selection_path() else if frontmost_app() is "iPhoto" then
iphoto_selection_path() else
error number -128 --エラー表示せずに終了する
end if
my every_replace(result, {" ", "'", "\""}, {"\\ ", "\\'", "\\\""}) end selection_path

on finder_selection_path() tell application "Finder"
((selection as list)'s item 1 as alias)'s POSIX path
end tell
end finder_selection_path

on iphoto_selection_path() tell application "iPhoto"
set a_photo to (selection as list)'s item 1
my replace(a_photo's image path, "Modified", "Originals") my replace(result, ".jpg", ".*") end tell
end iphoto_selection_path



on frontmost_app() tell application "Finder"
set app_name to name of (path to frontmost application) end tell
split(app_name, ".")'s item 1 as text
end frontmost_app

on split(sourceText, delimiter) if sourceText = "" then return {} set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to delimiter
set theList to text items of sourceText
set AppleScript's text item delimiters to oldDelimiters
theList
end split

on join(sourceList, delimiter) set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to delimiter
set theText to sourceList as text
set AppleScript's text item delimiters to oldDelimiters
theText
end join

on replace(sourceText, text1, text2) join(split(sourceText, text1), text2) end replace

on every_replace(sourceText, list1, list2) if list2 = "" then set list2 to {list2} repeat with i from 1 to list1's number
if list2's number = 1 then
set sourceText to replace(sourceText, list1's item i, list2's item 1) else
set sourceText to replace(sourceText, list1's item i, list2's item i) end if
end repeat
end every_replace

試用

  • ユーザー・スクリプト・フォルダに入れて、スクリプトメニューから利用する。
  • iPhotoかFinderで写真を選択して...
  • スクリプトメニューの「Shutter Count(シャッター回数を調べる)」を選択してみた。

できた!

環境

*1:ニコンのデジタル一眼はみな記録されるのかもしれない。D70、D7000でも記録されていた。