memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Google Photoにあるサイズの大きいファイルをできるだけ小さくしたメモ

何がしたかったのか?

タイトルの通りで、写真動画の管理用のアカウントで無料枠の15GBを使い切ろうとしていました。容量を買うか、他のサービスに乗り換えるか、NASにするか、という選択肢になりますが、まだ決めていません。とりあえず先延ばししようとGoogle Photoの機能で「容量の大きいファイル」を探し、そのファイルの容量を小さくしようとした手順です。

手順

  • Google Photoでサイズの大きなファイルを探しました(下図)。100MB以上の動画が20個くらいありました。とりあえずそれらをダウンロードしました。

  • 動画ファイルをみると1080pのようでしたのでそれを720pにすることにしました。この辺のさじ加減は動画の内容によるかと思います。以下がシェルスクリプトになります。
d=`exiftool -createdate "$1.mp4" | cut -c 35-53`
ffmpeg -i "$1.mp4" -vf scale=-1:720 -map_metadata 0 "$1_.mp4"
exiftool -alldates="$d" "$1_.mp4"

一応、説明します(僕も忘れるので)、1行目でGoogle Photoからダウンロードしたファイルの作成日(撮影日)を取得します。exiftoolはmacですとbrewでインストールしておきます(brew install exiftool)。これでdにyyyy:mm:dd hh:mm:ddの形式の文字列が格納されます。

つづいて、ffmpegコマンド(これもbrew install ffmpegでインストールします)で、720pにします。元動画によるのですがサイズが半分くらいになる場合があります。「-map_metadata 0」はメタ情報をコピーしなさいという指示なのですがあとで上書きするのでなくても良いです。

そして、3行目で、取得した撮影日(dの中身)を圧縮したmp4ファイルにセットします。

上記のスクリプトを例えば、aとかにして、0001.mp4を処理するときには「a 0001」という感じに与えます。

あとは、ダウンロードしたmp4ファイルの一覧をlsコマンド等で取得して、一括実行するシェルスクリプトを作ります。この辺の詳しいことは書きません。すんません。例えば、0001.mp4、0002.mp4、0003.mp4という3つのファイルがあったとすると、一括実行するスクリプトは以下のようになります。

a 0001
a 0002
a 0003

以上です。

とりあえず以上の処理で2GBくらい減らせました。そのうちにいいサービスが出てきてくれたらなぁ。。。という感じです。もしくはお布施払うかですね。1年くらいは先延ばしできるのではないかと考えています。

またあとで考えます。