LoginSignup
4
5

More than 5 years have passed since last update.

Pythonで写真や動画ファイルを整理する

Posted at

そもそも

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タグを取らなければならないかもしれません。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5