見出し画像

Amazon Photosの共有アルバムが時系列に並ばない。だからPythonで解決しました。



バスケットボールの試合を撮影していると、1日で数千枚、年間では4TB近い写真を撮ることがあります。

セレクトした写真は、チームや保護者のみなさんへ共有アルバムとして公開しています。場合によっては地区予選のアルバムを活動記録としてHPへ掲載していただくこともあります。

これまではGoogleフォトを使っていました。

共有アルバムとしては本当に優秀で、

・Windowsアプリから圧縮アップロードできる(短時間アップロード)
・アルバム説明文を書ける(大会の詳細情報)
・アクセス数が分かる(アカウントをお持ちの方の参加)
・コメントや評価機能がある(私は閲覧専用としてオフにしています)
・時系列で自然に写真が並ぶ

など、不満らしい不満はありませんでした。

ただ一つだけ。

容量です。

撮影枚数が増えるにつれ、無料アカウントを複数使う運用にも限界が見えてきました。

そこで移行を考えたのが Amazon Photos でした。


Amazon Photosは本当に魅力的

Amazonプライム会員なら、

・写真は実質無制限保存(動画も5GBまでは無料)
・オリジナル画質で保存できる
・アルバム共有ができる
・ダウンロードもオリジナル画質
・しかもプライムビデオまで見られる(商品購入でも得点多数)

年間4TB近く撮影する私にとって、

「毎年バックアップ用HDDを買い続けるより合理的では?」

そう思ったのです。


ところが、予想外の問題がありました

実際にアルバムを共有してみると、何とも言えない違和感がありました。

写真の並び順です。

例えば私が見せたい試合は、

円陣
↓
ティップオフ
↓
前半
↓
後半
↓
ベンチが盛り上がる
↓
表彰

という流れです。

ところが共有先では、

表彰
↓
ベンチ
↓
後半
↓
前半
↓
ティップオフ
↓
円陣

という順番になってしまいました。


私は写真ではなく「試合」を届けたい

「写真なんだから順番なんて気にしなくてもいい。」

そう思う方もいるかもしれません。

でも、私にとってアルバムは写真を並べたものではありません。

一本の試合です。

円陣から始まり、

ティップオフがあり、

試合の流れが変わり、

ベンチが盛り上がり、

最後に表彰で終わる。

そんな一日の物語を届けたい。

だから最初に表彰式が出てきてしまうだけで、その試合は別のものになってしまいます。
※実際には試合ごとにアルバム分けするので開会・閉会式については別アルバムにしています。


並び順を変えられないなら、発想を変える

共有側で並び順を変更できないか、いろいろ試しました。

・アップロード順を変える
・ファイル名を変える
・アルバムを編集する
・設定を探す

結果として、共有先では撮影日時を基準に表示されているようで、思うようには変更できませんでした。

そこで発想を変えました。

Amazon Photosが

新しい写真
↓

古い写真

の順番で表示するなら、

写真側の撮影時刻を逆転させればいい。

そう考えたのです。

例えば、

1枚目
2枚目
3枚目

を、

23:59:59
23:59:58
23:59:57

へ変換する。

するとAmazon Photosでは、

23:59:59
↓
23:59:58
↓
23:59:57

という順番で表示されます。

結果として、

見る人には撮影順に並んで見える。

単純ですが、これなら実現できます。


でも毎回手作業は面倒です

以前は、

  1. 日時順に並べる(複数のカメラの写真が混じるため)

  2. 全選択

  3. 先頭ファイルをリネーム

  4. Windowsの連番リネームを使う

という流れで作業していました。

大会ごとに繰り返すには、さすがに手間がかかります。

そこで、

「毎回やるなら、作った方が早い。」

そう考えて、Pythonで専用ツールを作ることにしました。


実際に作ったツール

このツールは、セレクト済みフォルダを指定するだけで、

・撮影順を解析
・ファイル名を連番へ変更
・Amazon Photos用フォルダを自動生成
・EXIF日時を逆順へ変換

までを一括で行います。

元画像には一切手を加えません。

生成されるのは For_Amazon_Photos フォルダだけです。


連写にも対応しました

最初の仕様は秒単位だけで並べていました。

しかし最近のカメラは秒間20コマ、30コマ、40コマと連写できます。

これでは同じ秒に大量の写真が存在します。

そこで、画像に含まれているExifデータ

DateTimeOriginal

だけではなく、

SubSecTimeOriginal

まで取得してソートするよう改良しました。

これにより、連写した写真まで正しい順番で並べられるようになりました。


あえて変更しなかったEXIFがあります

変更しているのは、

・DateTimeOriginal(シャッターを切った日時)
・DateTimeDigitized(データが生成された日時)

だけです。

一方で、

DateTime(画像が更新された日時)

は変更していません。

理由は単純です。

万が一Amazon Photos用画像だけが残ってしまっても、

元の撮影時刻をたどれる情報だけは残しておきたかったからです。


実際に使ってみて

変換速度は想像以上でした。

やっていることは、

・コピー
・リネーム
・EXIF書き換え

だけなので、とても軽い処理です。

今ではセレクト後のフォルダを指定するだけ。

この作業がほぼ自動化されました。

【補足】納品フォルダを選択して各試合名(第1試合・第2試合)というサブフォルダ内で実行します。単体で第1試合などのフォルダを選択した場合はその直下の画像ファイルで実行されます。
では納品フォルダにサブフォルダと画像ファイルが存在した場合はどうなるかというと、画像ファイルのみが対象となって処理されます。


おわりに

Amazon Photosは容量面では本当に魅力的なサービスです。

一方で、

共有アルバムの並び順だけは、私の使い方には合いませんでした。

だからサービスを諦めるのではなく、

自分の運用をプログラムで合わせることにしました。

Pythonを書きたかったわけではありません。

試合を、試合の流れのまま届けたかった。

その結果として生まれたのが、このツールです。

同じことで悩んでいる方の参考になれば嬉しいです。
ソースコードの部分は有料にはしていますが以上のことをAIと相談すればご自分でも作れると思いますで、楽しんで作ってみるのもいいと思います。


【有料】実際に運用しているPythonソースコード

※windowsでの環境設定と実行方法まで解説しています。
※コピーしてから実行するので安全な処理を行いますが実行結果に対して不具合が発生したとしても責任は負えません。

ここから先は

7,448字

¥ 300

Amazon Payで支払うと最大2%還元のチャンス! 9/30まで

撮影当日の朝食のバナナ購入費に使わせていただきますm(__)m