そもそも
Pythonが書けるようになりたい。手元にたくさんある未整理の画像/動画ファイルを自動で整理するコードを書いてみる事にしました。
仕様
python seiri.py [OPTION] [TARGET_PATH] [DEST_PATH]
TARGET_PATH に指定された画像あるいは動画ファイルをその撮影日時に合わせてリリネーム、[DEST_PATH]で指定されたディレクト以下に撮影日時及びデバイス毎に分類されたディレクトリ以下にコピーあるいは移動する。
TARGET_PATH に指定されたパスがディレクトリならば、そのディレクトリ内に存在する画像あるいは動画ファイルに対してまとめて実行する。
OPTION仕様
-c, --copy
ファイルをコピーして分類する。(Default)
-m, --move
ファイルを移動して分類する。
-t, --test
コピーも移動も行なわない。ファイルの探索と情報取得を行うだけ。
-r, --recursive
TARGET_PATHにディレクトリが指定された場合に、そのサブディレクトリを再帰的に処理する。
--add-orgname
リネーム時に元のファイル名を残す。
--skip-duplicated
ファイル処理時に同名のファイルが既に存在した場合に同一ファイルであば処理をスキップする。
リネーム規則と分類ディレクトリの構造は以下のようにしたい。--add-orgname
が指定されていなければ、[元ファイル名]
は付かない。
リネーム規則
[年]_[月][日]_[時][分][秒][デバイス名]_[元ファイル名].拡張子
例 : 2016_0503_193045_iPhone5_IMG123.jpg
分類ディレクトリ構造
.
`-[YEAR]
`-[デバイス名]
例 :
.
+[2015]
| +[iPhone5]
| +[iPhone6]
| +[HDR-CX430V]
| `[PENTAXK100D]
`[2016]
+[iPhone6]
+[HDR-CX430V]
`[PENTAXK100D]
撮影デバイス毎に分類される方がいいですよね。
ソースコード
exiftoolの導入が必要になります。
まとめ
exiftoolをsubprocess.check_out
で実行結果の標準出力を取得して、そこから必要な情報を抜き出しています。
大量にファイルがあるとsubprocess.check_out
から長い時間戻ってこなくなるので、動作しているのかわからない状態になります。出力を随時処理できるような仕組みにしないといけない。
手元にあった写真・動画群はこれで整理することが出来ました。JPG/MOVしか想定していないので、それ以外のファイルにちゃんと対応するには別のexiftoolタグを取らなければならないかもしれません。