«前の日記(2013-06-16) 最新 次の日記(2013-06-27)» 編集

ぱぱネット(仮)


2013-06-20 写真の重複を排除してリネームし直す [長年日記]

_ [Linux][開発] photomgr.plの概要

photomgrは、写真の重複を削除し日付ベースのファイル名にコピーし直すコマンドラインツールです (ダウンロード:photomgr_20130620.tgz) 使用について起きたファイル喪失、装置の故障などの損失について、私は一切責任をもちません。 まあ使う人もいないでしょうが、必ずバックアップをとってから実行してね。

_ [Linux][開発] 動作環境

  • データベースTokyoCabinetが必要です。
  • Imagemagickのconvertコマンドが必要です。
  • Perlが必要です。
  • PerlモジュールのImage::ExifTool, Imager, TokyoCabinet, DateTime, Digest::SHA1が必要です。

_ [Linux][開発] 実行

コマンドライン

% perl photomgr.pl [-srcdel] [-lazy 0.8 .. 1.0] 入力ファイルリスト 出力ディレクトリ
  • 対応ファイルは, *.jpg, *.png, *.mov, *.avi, *.mod, *.mpg, *.mp4です
  • 入力ファイルリストはfind 写真のあるディレクトリ -type fした結果(ファイルのリスト)です
  • 出力ディレクトリにはoutput_j(JPEG), output_m(MOVIE), output_p(PNG), db(DATABASE), trash(ゴミ箱)が作られます
  • オプション-srcdelをつけると入力リストのファイルを処理後に削除します(注意!)
  • オプション-lazyは画像比較アルゴリズム用のしきい値です。デフォルトは1.0(最大)です

アルゴリズム

  1. 入力ファイルのSHA1(ハッシュ)を計算します
  2. 既存ファイルにSHA1が一致する場合は無条件にスキップします
  3. 既存ファイルにSHA1が一致しない場合は出力ディレクトリにコピーします
  4. コピーファイルの名前は写真の撮影日(ExifのCreateDate,またはその他の時刻情報)からYYYYMMDD_hhmmss.拡張子に加工します
  5. コピーファイル同士が衝突した場合は、衝突ファイル同士で画像ヒストグラムによる類似度を計算します
  6. 類似度(MIN:0, MAX:1)がしきい値lazyと同じか大きい場合は「同じファイルである」と判定してコピーしません
  7. 類似度がしきい値lazy未満の場合はYYYYMMDD_hhmmss_DP数字.拡張子というファイル名でコピーします
  8. 類似度(MIN:0, MAX:1)がしきい値lazyと同じか大きい場合で、かつオリジナル(YYYYMMDD_hhmmss.拡張子)の方が小さい画像の場合は、オリジナルと_DP番号付きのファイルを入れ替えます

_ [Linux][開発] 作った経緯

そうだ!写真を整理しよう! と思って、 自分好みの命名方法になるようなソフトを探しましたが、無かったので作りました。

  • 今までWindows, Macで色々な写真管理ソフトを渡り歩いてファイルの命名方法がまちまち
  • 「大事な写真だから」と分散したディレクトリに、同じファイルがたくさん重複している
  • ブログのアップ用の縮小画像や、縦横回転した写真まで同じディレクトリに混じっている
  • Amazon S3+Glacierに写真を突っ込む場合、ある程度の固まりでアップロードできるように年単位で整理したい
  • 今使ってるiPhotoは、ムービーファイルも写真と同様に管理にされてしまい、ディレクトリを分けたかった

なお、画像比較アルゴリズムはこちらのブログをコピペしました(http://blog.vg4.net/archives/1318891.html)。 ヒストグラムのみの比較なので全然違う画像が類似度1.0と判定されることがあるので、 今回は撮影日が衝突したもの同士のみを比較しています。 Perl Imagerが死ぬほど遅いので画像の縮小だけconvertを使っています。

本日のツッコミ(全1件) [ツッコミを入れる]
_ 通りすがり (2013-06-26 05:50)

記事とは全然関係ないのですが、ずっとrssリーダーでぱぱネットを読んでいました。最近、ぜんぜん更新されないなぁと思っていたら、最近、たくさんのrssの配信が。ただ、内容はtvmatomeのリスト。これは仕様?


2001|04|
2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|03|04|05|10|

[BANNER]
このサーバーをもう12年も維持しているかと思うとめまいがしますよ。
ツッコミ機能は、ハンドル名が完全日本語じゃないと登録できません。
また、本文にURLが含まれていても登録できません。
いずれもSPAM対策です。
[Panda Papanda]
2013年
6月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

[Papanda]  [Kuma]  [Tomorin]  [Iron]  [Eiza]  [Dokkin]  [Honya]  [Zyou]  [Tsuyo]  [Bike]  [KoeBBS]  [Chukei]  [portal]  [tvmatome]  [KaoPaku] 

訪問者数:(+2560143)