Google PhotoにHEIC形式でアップロードして16MP制限を回避する

※このエントリを書いてるうちにHEIC形式のファイルが縮小されないのはバグだという記事がでてきました.そのうち修正されてこの回避方法は使えなくなるはずです.

Google Photoの設定でアップロードサイズを「高画質」にしておくと16MPを超えるサイズの画像は16MPに縮小されますが容量を気にせず無制限でアップロードできます.
最近iPhoneの写真は16MPを越えていても無制限にアップロードできると話題になりました.これはiPhoneの写真はHEIF形式で保存され,これを16MPにするためにデコード&エンコードすると元の画像より大きくなるのでそのままにしているのではないかと言われたりしています.

この理由が正しいのであればiPhoneでなくともHEIF形式に変換してアップロードした画像はオリジナルサイズで保存されるではないかと試してみました.

先ず手持ちのカメラ(Pentax K-5)でRAW撮影して現像したファイルを確認してみます.

$ identify ./H-IIBF8_HTV8.TIFF
./H-IIBF8_HTV8.TIFF TIFF 4942x3276 4942x3276+0+0 16-bit sRGB 73.7626MiB 0.000u 0:00.000
$ echo $(($(identify -format "%w*%h" ./H-IIBF8_HTV8.TIFF)))
16189992

4942 x 3276 = 16189992ピクセルで制限の16MPを少し超えていそうです.
2**20*16 = 16777216 よりは小さい(MiP?)

この画像をアップロードしてみます.アップロードにはgpupを使いました.

$ gpup ./H-IIBF8_HTV8.TIFF

アップロードしたファイルの情報を見るとこうなっていました.16.2MPで縮小されていないようです.

H-IIBF8_HTV8.TIFF
16.2 MP
4942 × 3276
77.3 MB

念の為設定を確認.

設定画面( https://photos.google.com/settings )にアクセスして,「高画質 (容量制限なし、無料)」にチェックが入っているのを確認します.

問題ないようです.

ちなみに,「元のサイズ」に設定した状態でアップロードした動画を「容量を解放」することで16MPに変換してGoogleドライブの容量を解放することも可能です.

HEICとJPEGも同様にアップロードしてみます.

$ convert ./H-IIBF8_HTV8.TIFF ./H-IIBF8_HTV8.heic
$ convert ./H-IIBF8_HTV8.TIFF ./H-IIBF8_HTV8.jpg
$ ls -1HSs ./H-IIBF8_HTV8.*
75536 ./H-IIBF8_HTV8.TIFF
 2632 ./H-IIBF8_HTV8.jpg
  688 ./H-IIBF8_HTV8.heic
$ gpup ./H-IIBF8_HTV8.heic ./H-IIBF8_HTV8.jpg

これも縮小されませんでした.

この画像は16MPを少し超えている程度なので縮小されないのかもしれません.もっと大きな画像で試してみます.

といっても自分の手持ちのカメラではこれが最大なので,画像を結合して作成します.(ちなみに処理時間はHEIC:56s, JPEG:3s)

$ convert -append H-IIBF8_HTV8.heic H-IIBF8_HTV8.heic 32MP.heic
$ convert -append H-IIBF8_HTV8.heic H-IIBF8_HTV8.heic 32MP.jpg
$ ls -1Ss 32MP.*
3572 32MP.jpg
1260 32MP.heic
$ identify 32MP.*
32MP.heic HEIC 4942x6552 4942x6552+0+0 8-bit YCbCr 0.010u 0:00.000
32MP.jpg JPEG 4942x6552 4942x6552+0+0 8-bit sRGB 3.4858MiB 0.000u 0:00.000
$ gpup 32MP.heic 32MP.jpg

結果はHEICは約32MPのまま 未圧縮 ,JPEGは 16 MP 3473 × 4605 になっていました.

同様に倍を試してみると HEIC 64.8 MP(9884 × 6552)未圧縮 となりました.
convertでキャッシュリソースが足りなくて転けたりしつつ更に倍( 9884 x 13104 )を試してみるとgpupでは「Failed: There was an error while trying to create this media item. (code=3)」,Chromiumでは「アップロードできません」というエラーメッセージが表示されアップロードに失敗しました.
容量は4.3MBほどしかないのでそのあたりは問題ないはずで解像度のリミットがありそうです.

てことで,少なくとも HEIC 64.8 MP(9884 x 6552) までは未圧縮でアップロード可能でなようです.
64.8 MP〜129.6MP の間に最大値があると思いますが今の所手持ちの機材では関係がないので確認していません.

環境
$ dpkg-query -W imagemagick chromium
chromium        76.0.3809.100-1
imagemagick     8:6.9.10.23+dfsg-2.1+b2
$ gpup -h 2>&1|grep Version
Version 1.x
$ git -C ~/go/src/github.com/int128/gpup/ log --oneline -1
fb48ce5 (HEAD -> master, origin/master, origin/HEAD) Merge pull request #27 from harupong/patch-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

Google Photos の PWA版を試す

鹿児島らぐの「鹿児島Linux勉強会 2018.06」の帰りにだべっていたときにGoogle Photos の PWA版がリリースされているという話を聞きました.これまでLinux版のアプリはなかったと思うので便利かも?と試してみました.

Google Chromeの設定

Google Chrome で chrome://flags/#enable-desktop-pwas にアクセスしてPWAをEnabled(有効)にします.Google Chromeを再起動すると反映されます.

20180610_19:06:14-7169

 

Google Photosページから導入

Google ChromeでGoogle Photosのページ( https://photos.google.com/ )にアクセスし,ログインします.

右上の「︙」マークの設定に「「Google Photos」をインストールしています︙」という項目が現れるのでこれをクリックすると「アプリをインストールしますか?」と聞かれるので「インストール」ボタンをクリックしてインストールします.(「インストールしています」というメッセージなので待っていたのですがいつまで経ってもインストールが始まりません……)

shutter_18-06-10_19:49:15_001

shutter_18-06-11_02:34:35_001

「インストール」ボタンを押すとポコッとGoogle ChromeからGoogle Photoアプリが分離します.

20180611_02:06:13-10426

これがPWA版のGoogle Photoのようです.

デスクトップアイコンの有効化

デスクトップ上に謎の「~/Desktop/chrome-ncmjhecbjeaamljdfahankockkkdmedg-Default.desktop」というファイルが現れました.中見はGoogle Chromeのアプリを呼ぶもののようでそれっぽいです.

$ cat ~/Desktop/chrome-ncmjhecbjeaamljdfahankockkkdmedg-Default.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Name=Google Photos
Exec=/opt/google/chrome/google-chrome --profile-directory=Default --app-id=ncmjhecbjeaamljdfahankockkkdmedg
Icon=chrome-ncmjhecbjeaamljdfahankockkkdmedg-Default
StartupWMClass=crx_ncmjhecbjeaamljdfahankockkkdmedg

#この後Chromiumでも試してみたところファイルは上書きされ,Execのgoogle-chromeがchromiumに変わりました.

このファイルを開くと警告が表示され,「信頼して起動(L)」ボタンを押すことでGoogle PhotosのPWA版が起動しました.

20180611_02:06:49-10049

「信頼して起動(L) 」ボタンを押したタイミングで,デスクトップの「chrome-ncmjhecbjeaamljdfahankockkkdmedg-Default.desktop」は「Google Photos」という名称とアイコンに代りました.実体は変わっていないようでshellでlsなどをすると以前の名前のままです.

20180611_02:06:21-10504

 

まだリリースされたばかりのせいか機能はWeb版と同じように見えます.メニューには「アプリのダウンロード」がありますし,まだこれからという感じです.

でも切り替わる頃にはフル機能になるでしょうしそうなるとLinuxでも現在のデスクトップ版と同様の機能が使えるようになるのではないかと期待しています.

ちなみに現在の画像ファイルのGoogle Photosへの自動アップロードは ~/Pictures 以下をcrontabでGoogleCLのgoogleコマンドを叩いてアップロードするようにしています.

$ crontab -l|grep google
*/10 * * * *  D=`date +\%m\%d\%H\%M.\%S` ; find ~/Pictures -newer ${HOME}/Pictures/.picasa_time -type f -print0 | xargs -0 -r -n1 google -v picasa post 'Instant Upload' && touch -t ${D} ${HOME}/Pictures/.picasa_time

しかしGoogleCLはオリジナルは認証関連でだいぶん前に動かなくなってフォーク版を使っていたり,PicasaのAPIだったりといつ動かなくなるか不安だったりします.動かなくなる前にPWA版の機能が充実してくれるといいですね.

環境

$ dpkg-query -W google-chrome-stable
google-chrome-stable    67.0.3396.79-1
$ dpkg-query -W chromium
chromium        67.0.3396.62-1
$ uname -m
x86_64
$ lsb_release -d
Description:    Debian GNU/Linux unstable (sid)

Googleドライブの写真を高画質に変換して容量を開放するメモ

Selection_006

Googleドライブの容量はほとんどgmailに利用しているのですが,たまに画像をアップロードしてしまい容量をいっぱいにしてしまいます.
画像サイズを小さく(現在は16MP以下)すると画像の容量がカウントされないのですが,サイズをオーバーしている画像を探して小さくするのはあまり現実的ではないです.
設定から自動的に縮小する方法があるのですが毎回やり方検索するのでメモしておきます.

設定 – Google フォト (https://photos.google.com/settings)

「アップロード サイズ(ウェブ上でアップロードする写真と動画のみ)
高画質 (容量制限なし、無料)」にチェックして
「容量を開放」でokです.数時間後には処理が終わっていると思います.

以下のページが参考になります.

容量を節約するために、写真が圧縮されます。写真のサイズが 16 MP を上回る場合は、16 MP まで縮小されます。
サイズが 16 MP の写真は、最大で約 61.0 cm x 40.6 cm まで高画質で印刷できます。
動画の解像度が 1080p を上回る場合は、1080p(高画質)まで縮小されます。動画の解像度が 1080p 以下の場合、保存された動画と元の動画の見た目の違いはほとんど生じません。

その他,
ドライブ ストレージ(https://drive.google.com/u/0/settings/storage?hl=ja)
にアクセスするとストレージの詳細が確認できます.