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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です