NAS の写真・動画の棚卸しと、重複をまとめるデータベース ― 18万枚の半分以上が重複、置き場所は別の表に
NAS に置いた写真と動画を、データベースで管理する準備を始めました。まず NAS の中を棚卸しして、どこに何がどれだけあるかを数え、そのうえで表の形を決め、取り込みのプログラムを動かしました。数えてみると、写真・動画とも半分以上が、別の場所との重複でした。
- 棚卸し:ファイルの数・大きさ・種類・場所を一覧にすること
- ハッシュ:ファイルの中身から計算する短い値。中身が同じなら同じ値になるので、重複を見つけるのに使う
- EXIF:写真に入っている撮影日時やカメラの情報
1. 棚卸し
AI 用の仮想マシン(vm1)から、NAS を NFS で読み取り専用で読み、Python で全ファイルの拡張子・大きさ・更新日時を数えました。NAS には何も書き込みません。6か所で約2分でした(NFS は速い)。
| 場所 | 写真 | 動画 |
|---|---|---|
| 写真・画像・動画のフォルダー | 約7,800枚 | 約190本(1.6TB) |
| 個人のフォルダー | 約3.5万枚 | 331本(2.3TB) |
| 古いパソコンの倉庫 | 約2.9万枚 | 1,424本 |
| バックアップ用の共有 | 約10.8万枚 | 3,582本 |
- 名前とサイズが同じものを1つにまとめると、写真は約18万枚(454GB)→ 約8.7万枚(190GB)、動画は約5,400本(4.4TB)→ 約2,300本(1.3TB)
- 大きい重複:同じ動画などが3か所にあって約670GB、ビデオカメラの動画のフォルダーと、SD カードの写しのフォルダーで約48GB など
- ファイルの更新日時はコピーした日になっていることが多く、撮影日は EXIF から読む必要がある。JPEG・HEIC は、ほぼ全部に EXIF があった
2. 表の分け方

重複を消してからデータベースに入れるのではなく、データベースの側で、同じ写真を1件にまとめ、置き場所を複数持てる形にしました。重複を消さなくても一覧には1枚として出ますし、「どこに何個あるか」が分かるので、あとで NAS のフォルダーを整理するときの材料になります。
- media_items:写真・動画の1件。中身のハッシュ、撮影日時とその出どころ(EXIF・動画の情報・ファイル名・フォルダー名・更新日時)、カメラ、大きさ、動画の長さ・形式、位置。画面や共有からは、番号ではなく固定の ID(UUID)で指す
- media_locations:置き場所。パスと、最後に見た日時・見つからなくなった日時。消えたファイルは、すぐには消さず印を付ける
- media_groups:RAW と JPEG、Live Photo の写真と動画のように、「同じ1枚」の組
- scan_runs:見て回った記録
固定の ID にしたのは、音楽のデータベースで、作り直したときに番号が変わり、コメントとのつながりが切れた反省からです。位置の情報は、家の場所が分かるので、共有の画面には出しません。
3. 取り込み
- 見て回り、前回とパス・大きさ・更新日時が同じなら「見た」印だけ付ける
- 違えば、先頭と末尾の 1MB とサイズから速いハッシュを作る
- 同じ速いハッシュの写真があれば、中身全部のハッシュで確かめる(200MB を超える動画は、速いハッシュとサイズで同じとみなし、全体は後で)
- 新しい写真なら、exiftool(1回だけ起動して使い回す)と ffprobe で撮影情報を読み、登録する
写真は1枚あたり約0.04秒で、動画のフォルダーで試すと、34本 → 17件(置き場所34)にまとまりました。もう一度流すと増えないことも確かめています。データベースには、vm1 専用の「この DB の読み書きだけ」のアカウントで書き込みます。
次は、このデータベースを元に NAS のフォルダーの計画を立てて、重複を整理する予定です。
