Xperia 1 VI で野良カメラを動かし、その写真をAmazonPhotoに正しい撮影日状態のままアップロードする方法。
要約
以下の手順をで良い感じになりそう。
-
Google Camera ports の Bigkaka 氏 の Gcam Apk をインストールする
- 今回は
AGC9.2.14_V13.0_aweme.apk
を使用
- 今回は
- F-Droidをインストールする
- F-Droid 経由で Termux をインストールする
- Termux の中で exiftool をインストールする
pkg install exiftool
- 撮影を行い、ファイル名の Prefix に「AGC_」が付いたファイルを用意する
- Termux で次の操作を行う
-
cd /storage/emulated/0/DCIM/Camera exiftool -overwrite_original_in_place -P -exif:all= -tagsfromfile @ -all:all -unsafe AGC_*.jpg rename AGC_ BGC_ AGC_*.jpg
-
- Amazon Photo を立ち上げてアップロードを開始する
背景
Xperia 1 VI は、カメラの性能が高いことで知られている。
1 VI では、従来の Xperia のような Photo と Video が分離しておらず、UI も Android 標準のそれをちょっとカスタマイズしたようなもので、普通に使いやすい。(決して昔の Xperia のカメラ UI が使いづらかったとは言わない)
でも、やっぱり Google Pixel のカメラアプリが使いたい。
Pixel のカメラアプリは、ソフト面での処理に重きを置いていることもあり、Xperia のカメラアプリとは違ったテイストの写真が撮れる。スマホカメラ評論はガチ勢に任せるとして、素人からしたら単にどっちのテイストが好きかの差でしかなく、そのどっちもが使えれば最強って安直な発想が生まれる。
そこで、Xperiaのカメラ + Gcamの強力なソフト処理 の悪魔合体の果てを見たくなった。
環境
- Xperia 1 VI (Android 14)
- 私は Red の SIM フリー版。
- root 化していない。する必要もなさそう。
- [opt.] TypeC で接続できるキーボード
- タイピングが出来ればそれでいい。Shell の海をソフトウェアキーボードで泳ぐのは地獄が過ぎる。
- 日本語キーボードがよさそう。US配列のキーボードを接続したらJISキーボードと扱われてしょんぼりした。
- [opt.] Amazon Prime会員であること(Amazon Photo にアップロードするため)
Win/Mac/Linux などのマシンを別途用意する必要はない。
今回は一応 Android だけで完結できそう。
補足事項:
** MEMO: Gcam って?**
端的に言ってしまえば、 Google Pixel 系に標準で搭載されているのカメラアプリを他社 Android でも動かせるように野良の開発者たちがいじってリリースしているもの。
** なんで Xperia 1 VI で検証するの? **
手元が Xperia 1 VI だから。
Xperia の直近のモデルは、物理レベルでの特殊なカメラ仕様上、Pixel 系と似て非なる挙動を取る。そのため、Xiaomi や Samsung のスマホのように、ストレートに Gcam の最新をインストールして動かせば良いってわけにはいかないようである。
** 違法性はないの? **
そもそも、Google Play で公開を認められていないアプリ=違法というわけではない。Google 様のルールから逸脱しているってだけ。
例えば Adguard は Android 自体の中に VPN サーバーを立てて通信をフィルターするような挙動を取る関係か、独自ライセンス体系だからなのか、公式 HP から Apk を DL してインストールする手順だけが提供されている。
ただ、基になっているカメラアプリのソースコードについて、ライセンスがどうなっているとか、データの出所はどこなのか、といったことについては、回答が難しい部分かもしれない。
Google Camera Port: Safety Warning
In a few words:
These files come from unofficial sources.
People say these files are safe and I never had issues with them, but I cannot assure you they are safe.
Use at your own risk. Don't blame me if something bad happens.
** 安全性の保証は? **
ない。
今は安全でも、次のバージョンの apk に悪意のあるコードが埋め込まれないとも限らない。
Google Play や (iOS の)AppStore は、厳格なルールやバリデーションを提供しているからこそ、安全性の割合が比較的高い水準に保たれている(という建前になっている)わけで、そこから外れるということは、そのあたりの自己責任が伴う。
各工程と調査結果
Gcam
Google Camera ports の Bigkaka 氏 の Gcam Apk をインストールする
一応、何個かはAPK を DL してインストールしてみたが、全ファイルは試してないため、誰か完動するパターンを知っていたら教えてほしい。
調査:Xperia 1 VI での Gcam の相性について
まず大前提として以下の条件が付く
- 動画撮影は期待しない方が良い
- BigKaka 氏以外の Gcam しか動かないという心づもりでいると楽(全部検証してられない)
その上で、検証してとりあえず撮影までこぎ着けたのは以下の 3 つ
- Bigkaka AGC8.4.300_V11
- 撮影と録画が動く。ほかのモードは安定せず落ちる。フォーカスタップをすると落ちる。
- Bigkaka AGC9.4.24_V2.0
- 撮影(とポートレート)は動く。ほかのモードは安定せず落ちる。フォーカスタップをすると落ちる。レンズを切り替えると起動不可となり、再インストールするまで使えなくなる。
- Bigkaka AGC9.2.14_V13.0
- 撮影(とポートレート)は動く。ほかのモードは安定せず落ちる。フォーカスタップをすると落ちる。
ということで、とりあえず9.2を使うことにしてみる。
その他だと、有名安定どころの BSG 氏の Gcam は一切使えないことは確認した。
調査:動作バージョンではExifがおかしくなる
今回使用する Bigkaka の Gcam で撮影した写真は Exif がおかしくなる。
具体的には、ぱっと見全く問題ないが、「Amazon Photoにアップロードすると、撮影日が消滅する」ため、日常使いとしては非常に厄介な問題を抱える。
原因と対策の詳細は、先人の記事を参照していただきたい。
端的に言えば
- Bigkaka の Gcam で撮影した写真は Exif がおかしい
- BSG の Gcam なら Exif が正常。
- ただし、Xperia 1 VI で動かない
- そのため、Bigkaka の Gcam で撮影した写真を Exiftool で修正する必要がある
Termux + F-Droid
F-Droid は、Android 用のオープンソースアプリケーションのリポジトリで、Termux はその中で公開されているLinuxターミナルエミュレータアプリ。
iOSだと iSH とかあるけど、Android だと Termux が一番有名かもしれない。
一応、Google Play にも Termux はあるのだが、今回はCameraディレクトリの中へアクセスして操作を行う関係上、より多くの権限を許可してもらう必要があり、F-Droid 版だとそれをクリアできるため、こっちを使うことにした。
Termux での exiftool のインストール
幸いなことにpkg install exiftool
でインストールできるため、それ以上はなかった。
Termux での Exiftool の操作
先ほどの記事でも紹介されていたが、以下のコマンドで Exif を修正できる。
exiftool -overwrite_original -P -exif:all= -tagsfromfile @ -all:all -unsafe fixme.jpg
ありがたいことに、Termux上でもこのコマンドは正常に動作する。
だが、残念なことに、-overwrite_original
のオプションでは、ファイルを置き換える挙動を取るため、元のファイルが消滅してしまい、パーミッションが変わってしまう。
非root環境でファイルのパーミッションが変わる(具体的には770が660になり、実行権限を失う)と、Androidの各種アプリ(例えばフォトやギャラリー)から写真ファイルを開けなくなるうえ、770に戻すことが出来なくなるという非常に厄介な問題が発生する。
これを解決するためには、-overwrite_original_in_place
オプションを使う必要がある。
exiftool -overwrite_original_in_place -P -exif:all= -tagsfromfile @ -all:all -unsafe fixme.jpg
これで、元のファイルを置き換えでなく上書き保存の扱いで、Exif を修正することができる。
ちなみに、パフォーマンスは(リードライトの棲み分けが明確な分)置き換えの方が速い模様。とはいえ、背に腹はかえられぬ。あまり過度に写真を溜め込んでからコマンド実行は避けた方が良いかも。
Exiftool 実行済みかどうかの判定方法について
Exiftool は、ファイルの中身を書き換えるため、一度実行したファイルに対して再度実行する二度手間が発生してしまう。
それ自体は全く問題がない(べき等性)のだが、スマホに余計な負荷をかける必要もないわけで、対策しておきたい。
シンプルにPrefixを変えるとかで良さそう。Amazon Photo で整理する前処理で行ってしまえば変な影響もないので、ファイル名を変える方向で考えてみる。
ちょうどBigkaka の Gcam で撮影した写真は、デフォルトファイル名の Prefix に「AGC_」が付いているため、それを利用することにした。
ぱっと思いつきそうなのは以下のこれ。
mv AGC_*.jpg BGC_*.jpg
結論から言うと、↑のコマンドは2つの問題がある。
- mvコマンドは、Outputにワイルドカードを使うことができないため、ループ処理を書く必要がある。
- mvコマンドは、ファイルを「移動」することでリネームを実現する機能を持っているため、今回の非root環境のCameraディレクトリ上では、パーミッション上の問題からNG。
そのため、以下のコマンドを使うことにした。
rename AGC_ BGC_ AGC_*.jpg
通常用途では mv で事足りてしまうので rename を使わなきゃいけない状況はほぼないと思われるが、こういう場面もあるんだなということを覚えておくといいかもしれない。
これで実行済みかどうかの判定ができるようになった。
Amazon Photo
あとは何も考えずにアプリを起動してアップロードを開始するだけ。
サムネイルギャラリーの先頭に追加されていたら正常に処理できた証拠。
課題
exiftool を呼び出すための手順が Android 上で完結しているものの、コマンドや文字入力がかなりめんどくさいので、何かしらの方法で簡略化できないか検討したい。
home ディレクトリにシェルスクリプトを置いて、それを実行するとか、そういう方法が出来ればそれが良さそう。
home に実行スクリプトを置いてみる
Termuxのシェル芸を毎回毎回やってたら苦痛でしかないので、なんとかしてみる。
cd ~
pwd
# /data/data/com.termux/files/home が出てくるはず
pkg install vim
vim fixExif.sh
>>
#!/bin/bash
cd /storage/emulated/0/DCIM/Camera
exiftool -overwrite_original_in_place -P -exif:all= -tagsfromfile @ -all:all -unsafe AGC_*.jpg
rename AGC_ BGC_ AGC_*.jpg
<<
chmod 770 fixExif.sh
これで termux を次回以降シンプルに操作できるようになった。
対象ファイルがない状態で実行すると、renameあたりが怒るが被害はなさそうなのでこれでヨシ。
所感
ここまでして、野良カメラを使うメリットはあるのか?という問いがあるとしたら、答えは「ない」と即答する。
だって、Xperia 1 VI のカメラは十分に良いし、アプリも使いやすい。試してみたい気持ち以外の動機がないので、試せた後「じゃあ常用する?」と言われたらうーん・・となる。
せめてExif問題が解決して、カメラのほぼ全項目がCrashせず動くXperia用Gcamがリリースされるならなぁ...
Xiaomi/Sharpとの2台持ちにならないだけマシと考えることにしよう。
写真の比較
屋外だともうちょっと変わってくるのかもしれない。
- Xperia 1 VI + SONYカメラアプリ
- Xperia 1 VI + BigKaka Gcam(Leicaモード)
終わりに
Xperia 1 VI は良いゾ。
参考資料
Discussion