にほんブログ村 写真ブログ デジタル写真へ
にほんブログ村のランキングに参加中です

exiftool 余談・・・

2017年07月11日 00:00

Tokyo Bay

Tokyo Bay


Lumix GX7, SMC PENTAX-FA28mmF2.8AL


※ブログに視覚要素を加えるlightboxを導入しています。上記画像をクリックすると少し大きな画像をポップアップして見る事が出来、暗くなった部分をクリックするか、画像下部のCloseをクリックすると元に戻ります。



前々回の記事に引き続き、しつこくexiftoolネタを・・・。今日はタイトルの通り余談であるが、この余談が必要になる方もいらっしゃるかも・・・。

先に余談と言うよりも重要事項?、かなと思うのが・・・。

ExifToolGUI

これはexiftoolを利用したWindows用のGUI環境だ。実を言うとこれでおおよその作業が可能となる。ダウンロードはこちらのページの「Latest ExiftoolGUI version x.xx」をクリックすれば良い。

使い方は、、、

ExifToolGUI - k本的に無料ソフト・フリーソフト

を見れば判るかと思う。

Mac OSやUNIX系をお使いの方は、、、

pyExifToolGUI - GitHub Pages

と言うGUIアプリケーションもある。使った事はないが、解説を読む限り、ある程度の作業は可能みたいだ。

さて、今回、exiftoolネタを書くに辺り、私自身もLightroomでレンズ名や焦点距離を表示させる為にJPG、RAW(xmp)のEXIF情報を更新している。

と言うのも今の今までLightroomで実際に使うのはRAWファイルなのでJPGを参照する事がほとんどないのと面倒(時間が掛かる)が先立って多くのJPGファイルでEXIF情報を書き換えていなかった。

しかし「レンズ名不明」とか「K or M Lens」と表示されるのも癪なので一気に更新した。10万枚くらいのJPGファイルを参照するので1日30分くらい作業でなんだかんだと数週間掛かったと思う。

exiftoolはサブディレクトリーを再帰的に辿ってくれるオプションもある。それが「-r」だ。ついでに「-ext」も学んじゃおう。

今いるフォルダの下にPentaxフォルダがあり、それ以下、サブフォルダも全て辿って拡張子がJPGもしくはxmpのファイルにlightroomで加えたキーワードにsmcm28mmF2.8と言う文字列があれば-lensと-lensmodelにPENTAX-M 28mmF2.8、-FocalLengthと-FocalLengthIn35mmFormatにそれぞれ28と56を書き足し更新したかったとする。


exiftool -lens='smc PENTAX-M 28mmF2.8' -lensmodel='smc PENTAX-M 28mmF2.8' -focallength='28' -focallengthin35mmformat='36' -ext JPG -ext xmp -r Pentax -if '$subject =~ /SMCM28mmF2.8/i' -overwrite_original



これで例えばPentax/K-5/2012/01-01/jpg/、こんな4つ下の階層の中にあるJPGファイルでも対象としてくれる。

しかしうちだけの環境なのか、大量のファイルを処理するとexiftoolのバグなのかLightroomのバグなのか、はたまたOS(Windows)のバグ?、不思議な現象に陥り、それを如何に回避するかで結構時間が掛かってしまった。結局1つ1つのフォルダ毎で作業していたので数週間掛かってしまった。

その不思議な現象とは・・・。

作業は今までのネタの通り、先ずはLightroomのキーワードにレンズ名を登録し、EXIF内のsubjectタグにそれを書き込む訳だが、その際、一気にメタデータを更新すると時折「ファイルが書込み禁止になっているから更新出来ない」なるエラーが起こる。

書込み禁止?、エラーになっているファイルのパーミッション(ファイルのアクセス権)を確認しても書込み禁止になっていない。何だろう?、この段階で躓く。

しかし何て事はなかった。エラーになったファイルに対して再度Lightroomでメタデータの更新をしてやると問題なくキーワードを書き込んでくれる。1つのフォルダに対して更新している際にはあまりこの現象は起こらない。複数のフォルダで一気に大量のファイルに対して更新を掛けるとその手のエラーが起こるみたいだ。

加えて時短の為にLightroomでメタデータを更新しつつ、同時に別フォルダのファイルに対してexiftoolを利用してレンズ名等を書き込んでいるからハードディスクがフルに動いている。恐らくLightroomが書き込みしようとしている際に何かのタイミングで一定時間そのファイルにアクセス出来ない(ハードディスクが超ビジー状態だったり)と勝手にそんな嘘のエラー情報を出してくれちゃうみたい。

Lihgtroomは複数の作業を平行して行える。

例えばフォルダから新たなファイルをカタログに追加すると同時にすでにカタログに入っている写真に対してexifデータを更新し、それをjpg、xmpファイルに保存させたりと・・・。

しかしそんな時でもハードディスクがビジー状態になると誤動作してしまい、上述した「ファイルが書込み禁止になっているから更新出来ない」と怒られてしまう。

これを回避するにはハードウェア(パソコン、ハードディスク、メモリなど)を更新するしかなさそうだ。
そしてそんな時にexiftool側でも変な動きをしちゃうんだ。exiftoolは自動でテンポラリーファイルを作りながら処理されるのだが、これも何かのタイミングでテンポラリーファイルが削除されず残ってしまう時がある。そうなるとexiftoolで何をやってもそのテンポラリーファイルを削除しない限り、オリジナルファイルは更新されない。

さらにxmpファイルに限ってなのだが、本当に書込み禁止になっちゃうファイルも出てきてしまった。これは未だに何が原因か判らない。そうなるとcygwin上で「chmod 777 *.xmp」とするしかない。

この3つを理解する(対処する)のに何日掛かったか・・・。

あと・・・。全ファイル中たったの2枚、確率からすると0.00002%でしかないのだが、exiftoolでメーカーノートのオフセットに誤りがある、そんなエラーで更新されないのがあった。たったの2枚なので大きな影響はないが、とっても気持ち悪いでしょう?。

ネットで調べるとまんまその通り。exifデータが書き込まれる位置、オフセットが狂っているとの事。ファイルそのものが壊れている訳じゃない。ちゃんと写真を表示するし、加工、更新保存も出来る。

このエラーが出た際の回避法はexiftoolのオプションに「-m」を付ける。「致命的なエラーでないものは無視せよ」ってのがこの-mオプション。これで対症療法ではあるが何とかなった。


exiftool -lens='smc PENTAX-M 28mmF2.8' -lensmodel='smc PENTAX-M 28mmF2.8' -focallength='28' -focallengthin35mmformat='36' -if '$subject =~ /SMCM28mmF2.8/i' -overwrite_original -m *.JPG



「-F(大文字)」オプションを付けてその手のファイルを処理するとリカバリー(オフセット修正)が出来るようだが、その方法がいまいち判らない。今後の課題だ。

私は上のようなexiftoolを使わずに自作のperlスクリプトでEXIF内容を更新しているので、スクリプトに欠陥があるのかとチェックしたが、まぁ単純なループ処理なのでおかしい箇所は見当たらず。第一、その2枚は過去に一度もLightroom、exiftool(perlスクリプト含め)でexif内容を更新していなかったカメラが出力したまんまのJPGファイルだったんだ。結局何故オフセットが狂ったのか原因は判らずじまい。

このexiftoolを駆使出来れば電子接点のないレンズやマウントアダプターを介して他社のレンズを使っていてもLightroom等でレンズ名や焦点距離が表示されるようになり、怖いものはない!。またLumixカメラが出力するJPGでは現像ソフトにレンズ名が表記されないのでそれも対応も可能になった。皆さんも是非、exiftoolを活用しよう!。 最後にもう一度注意点を。

オプションの「-overwrite_original」はオリジナルファイルを上書きせよなる命令になるので、exiftoolを使い慣れていないと誤った情報をオリジナルファイルに登録してしまう恐れがある。それが原因でexifのオフセットが狂ってしまう可能性も高い(そうなると現状お手上げ)。

最初のうちはテスト用フォルダを作成し、そこにファイルを放り込んでexiftoolに慣れるまでテストするのを強くお勧めする。「もう俺はexiftoolで失敗しない」と自信を持ってから実践投入である。あとは面倒でも海外のサイトでexiftoolを解説しているページを翻訳ツールに頼りながら1つ1つ見て学ぶ事かなぁ。

exiftoolの一番の厄介は・・・。MS-DOSやUNIX系OSを使っていない方にはハードルが高い事。「exiftool本体のpathを通す?、バッチファイル、スクリプトとは何ぞや?、perl、正規表現?、ダブルコーテーションとシングルコーテーションの違いって?」、そうなるとさすがにうちはパソコン入門サイトではないのでそこまでの解説は無理。各自が研究するしかない。

例えば今まで挙げたexiftoolの構文サンプルはcygwinと言うUNIXをエミュレートした環境下でのターミナル(mintty)から操作したもので、これをそのままWindowsのコマンドプロンプトで使うとエラーになる。どうしてエラーになるか?、それが判らないと先に進めない。

そんなのが面倒・・・、そんな方は冒頭のリンクを辿り、GUIなexitool系アプリケーションの使用をお勧めしたい。


にほんブログ村 写真ブログ デジタル写真へ
にほんブログ村のランキングに参加中です



コメント

  1. auf | URL | 3eyVfeeo

    ExifToolGUI,僕も先日見つけてダウンロードだけはしてあります.さすがに
    コマンドラインで大量にやるのはキビシイのでこれでなんとかなればいいな
    と思っておりますが.

  2. BigDaddy | URL | -

    > auf さん

    Aufさんの場合、ほとんどが電子接点の無いオールドレンズで撮影されているようなのでそれを管理するのは大変そうですね。

    exifデータの参照にはGUIの方が遥かに便利ですし、ちょっとした修正でもこっちのGUIを使っています(笑)。近々、exiftoool最終ネタでこのGUIネタでもやろうかと思っています。今まで解説してきたような作業、実はこれでなんとかなっちゃいます(笑)。

  3. RigelNightBug | URL | GzSZFFvQ

    自分も余談ですが、ExifTool、実は、「Classicchromeの為」だけに、使っています(w。
    それ以外は、以前にも申し上げた、F6Exifを常用です。

  4. BigDaddy | URL | -

    > RigelNightBug さん

    私がexiftoolを知ったきっかけがF6Exifでした。でもJPGとNikonのRAWファイルしか扱えないって事で、何かないかなぁと探していてexiftoolに出会ったんですよ(笑)。

コメントの投稿

(コメント編集・削除に必要)
(管理者にだけ表示を許可する)