SyntaxHighlighter

2015/06/20

DCF脱却の写真整理 - smart-image-renamer

これまでデジカメ一台だったので整理には困らなかったのですが、デジイチ、コンデジ、スマホ、他人のコンテンツ…と一度に集まってくると写真の整理が大変です。WindowsではEXIFデータの撮影日を表示してソートすることも可能で楽になっていますが、OSに非常に負荷がかかっています。また、複数カメラや他人のコンテンツとマージしようとすると、同じファイル名だったりしてコピーできなかったりします。
そもそもDCF規格というものに日本メーカのデジカメが準拠しているために、ファイル名の重複が生じたりします。この規格があると、カメラ機器内での効率的な処理やカメラ間でのメモリーカード共有が可能になるなどのメリットがあります。しかし、内蔵メモリが主体のスマホでは全く規格に従わずに、CPUをうまく駆使して解決できる世の中になっているのも事実です。

そもそもファイル名に長さ制限がなくなっているのですから必要なメタファイルをEXIFに追加すれば、ソートやマージなどに対応することができます。ちゃっとスクリプトを書いて使おうと思ったのですが、この手の発想はたくさんあるので調べてみたところザクザクでてきました。

今回はいちばん応用が利きそうなsmart-image-renamerを利用してみたので、そのメモを書きます。

まず環境ですが、Pythonで動作します。ですので、各OSの上にPythonをインストールしておく必要があります。どうやらPython3が対象のようなのですが、Python3でもそのままでは動かず、下記のようにカスタマイズしています。ですので、Python2でもチャレンジ可能ではないでしょうか。

はじめにインストールですが、PIP (PyPI - the Python Package Indexのパッケージャー)をインストールする必要があります。
$ sudo easy_install pip
次にsmart-image-renamerをインストールします。
$ sudo pip3 install smart-image-renamer
ここではPython3を仮定しているためpip3としましたが、Python2の場合はpipとすればOKです。ただ、バージョン0.3をこのまま実行すると
$ smart-image-renamer.py -f PIC{YYYY}{MM}{DD}_{hh}{mm}{ss}_{Make}_{Model} <images_dir>
Traceback (most recent call last):
  File "/usr/local/bin/smart-image-renamer.py", line 31, in <module>
    from _version import __version__
ImportError: No module named '_version'
とエラーになってしまいます。またEXIF内のファイルタイプがMPOですと拡張子が".MPO"になってしまいます。ですので、scriptを下記のように修正しました。
31c31
< from _version import __version__
---
> #from _version import __version__
91,92c91,92
<     parser.add_argument('-V', '--version', action='version',
<                         version='%(prog)s {}'.format(__version__))
---
> #    parser.add_argument('-V', '--version', action='version',
> #                        version='%(prog)s {}'.format(__version__))
202c202,204
<                 new_file_name = (input_format + '.{ext}').format(**new_image_data)
---
>                 new_file_name = (input_format).format(**new_image_data)
>                 fext = os.path.splitext(f)[1];
>                 new_file_name = new_file_name + fext;

これで改めまして、下記のようにスクリプトを実行して完了です。
$ smart-image-renamer.py -f PIC{YYYY}{MM}{DD}_{hh}{mm}{ss}_{Make}_{Model} <images_dir>

0 件のコメント: