Googleフォトを使い始める前に、写真と動画を少し軽くするデスクトップアプリをAIと一緒に作りました。
これまでは、私と妻それぞれのiPhoneに写真がたまり、iCloudの容量もそれぞれ増やしていました。
写真を共有するときはLINEのアルバムを使うことも多かったのですが、あとから見返したい写真が増えてくると、だんだん「家族の写真置き場」としては少し面倒に感じるようになりました。
そこでGoogleフォトにまとめようと思ったのですが、ここで気になったのが容量です。
何も考えずに一眼レフやGoProのデータまで全部入れていくと、すぐ容量がいっぱいになりそうです。
Googleフォトの容量を増やせば解決はしますが、毎月の支払いを増やす前に、できることを考えました。
今回は、Googleフォトへ入れる前の写真と動画を、自分で扱いやすいサイズに変換するアプリをAIと作った実装ログです。投資ツールや子ども向けAIとは少し違って、生活の中で地味に困っていたことを道具にした話として残しておきます。
- 写真や動画をドラッグして、まとめて変換できるデスクトップアプリ
- 画像と動画で、解像度と画質を別々に選べるようにした
Googleフォトの容量対策として、写真と動画を軽くしたくなった
Googleフォトに写真をまとめたいと思った理由は、共有をラクにしたかったのとiphonの容量不足からです。
私と妻で写真を持ち合って、必要なものをLINEで送り合って、アルバムに入れて、あとから探す。
この流れ自体はできるのですが、写真が増えるほど少しずつ手間が増えます。
ただ、Googleフォトに全部入れれば終わり、とはなりませんでした。iPhoneで撮った写真だけならまだしも、一眼レフやGoProで撮った写真・動画は容量がかなり大きいです。
旅行や子どものイベントで撮ったデータをそのまま入れていくと、便利になる前に容量の心配が前に出てきます。
ここで避けたかったのは、写真整理をラクにするために始めたはずなのに、毎月の固定費だけがじわじわと増えることでした。
そこで、アップロード前に自分で変換できるアプリがほしくなりました。画像編集ソフトで1枚ずつ触るのではなく、フォルダごと入れて、ある程度まとめて処理できるものです。
作ったのは、ドラッグしたファイルをまとめて変換できるアプリ
今回作ったアプリは、かなりシンプルです。
写真や動画、またはフォルダをアプリに入れると、対象ファイルを一覧に出します。そのあと、画像用の設定と動画用の設定を選んで、一括変換を始める流れにしました。
画面の構成も、やりたいことに合わせて最小限にしています。
上から順に、ファイルを入れる場所、追加されたファイル一覧、画像の設定、動画の設定、変換ボタン、進捗パネルです。いろいろな機能を詰め込むより、Googleフォトに入れる前の下準備だけに集中させました。
私の使い方だと、一眼レフとGoPro、iPhoneまわりのデータをある程度拾えれば十分でした。
出力ファイルは、元のファイルと同じフォルダに置くようにしました。
名前は元ファイル名に_resizeを付ける形です。元ファイルを上書きしないので、変換結果を見てからGoogleフォトに入れるか判断できます。ここは地味ですが、家族写真のように失いたくないデータではかなり大事だと思っています。
画像はsharp、動画はffmpegで変換する形にした
アプリの土台はElectron、React、Viteで作りました。画面はReactで作り、ファイル操作や変換処理はElectronのmainプロセス側に寄せています。レンダラー側から直接なんでも触るのではなく、preloadを通して必要な機能だけ呼ぶ形です。
処理の流れは、画像は並列、動画は直列になっています。
画像はまとめて処理しても比較的回しやすいですが、動画を同時に何本も変換すると重くなりやすいです。家庭用のアプリとしては、速さだけを追うより、パソコンが固まりにくいほうを優先しました。
このあたりは、AIにかなり実装を任せています。私は「画像と動画を別々に設定したい」「元ファイルを消したくない」「変換中の進捗を見たい」という使い方の条件を出し、AIにはElectron側の処理、Reactの状態管理、進捗通知のつなぎ込みを作ってもらいました。
AIに作業を任せる感覚については、以前AIエージェントの記事にも書きました。今回も、答えをもらうというより、目的に向けて一緒に手を動かす感覚に近かったです。

ただし、任せたから終わりではありません。実際に動かすと、やっぱり生活の使い方に合わせた修正が必要になります。
容量が増える変換結果は、保存しないようにした
もうひとつ大事だったのが、変換したのに容量が増える問題です。リサイズや圧縮をしているつもりでも、元ファイルの形式や中身によっては、変換後のほうが大きくなることがあります。特にPNGまわりは、圧縮設定が甘いと「軽くするための変換」のはずが逆効果になります。
最初の実装では、変換処理が成功すればそのまま出力していました。でも、今回の目的は変換すること自体ではありません。Googleフォトに入れる前に容量を抑えたいので、容量が増える結果を残してしまうと目的から外れます。
そこで、変換後に元ファイルと出力ファイルのサイズを比較し、出力側のほうが大きい場合は変換ファイルを残さないようにしました。画面上では「このファイルは変換しても軽くならなかった」と分かるように表示しますが、考え方としては、容量を増やす変換結果を採用しない実装です。
画像側では、PNGのcompressionLevelも見直しました。品質設定に応じて6、8、9のように調整し、ほぼ非圧縮に近い状態で出てしまうことを避けています。動画側でも、変換完了時にサイズを確認し、増えている場合は出力ファイルを残しません。
この実装を入れたことで、「変換したから安心」ではなく「変換した結果、本当に軽くなったものだけ残す」流れにできました。家族写真の整理では、こういう地味な防御がけっこう効くと思っています。
実装結果
設定は、画像と動画で分けました。写真と動画では変換の重さも、見た目の劣化の感じ方も少し違うからです。画像だけ軽くしたい日もあれば、GoProの動画をまとめて小さくしたい日もあります。
解像度は、4K、FHD、HD、SD、Originalを用意しました。画像は最大の幅と高さを指定し、縦横比を保ったまま内側に収める形です。動画は幅だけ指定して、高さは自動で合わせます。これで縦横比が崩れて、人物や風景が変に伸びることを避けられます。
画質は、高画質、標準、容量優先の3つにしました。画像はJPEGの品質、動画はCRFの値で調整します。細かい数字を毎回考えるより、普段使いではこの3択くらいがちょうどよさそうでした。
私が欲しかったのは、変換の専門ツールというより、迷わず使える家用の道具でした。
細かい設定を全部開放すると、できることは増えます。でも、そのぶん毎回「どれにするんだっけ」と止まります。今回は、普段は標準で、必要なときだけ高画質や容量優先に変えるくらいの使い方を想定しました。

AIと作る生活ツールは、完成品より途中の判断が大事だった
今回のアプリは、すごく派手なものではありません。写真や動画を入れて、解像度と画質を選んで、変換する。それだけです。でも、私にとってはかなり生活に近い道具になりました。
投資ツールや子ども向けのAI活用と違って、今回はもっと日用品に近い感覚です。写真整理が面倒、共有が面倒、容量が気になる。そういう小さな不便を、AIに相談しながらデスクトップアプリに変えていきました。
途中で大事だったのは、AIに「全部いい感じにして」と投げることではありませんでした。画像と動画で設定を分けること、元ファイルは残すこと、容量が増える変換結果は保存しないこと、動画は直列にすること。こうした線引きは、実際に使う私の側で決める必要がありました。
この線引きを毎回その場の勢いで考えると、作る途中で目的がぼやけます。仕様メモを先に置く考え方を読むと、今回の「元ファイルは消さない」「容量が増える結果は残さない」という条件の意味が分かりやすくなります。

今回いちばん良かったのは、生活の中のちょっとした面倒を、AIと一緒に自分用の道具へ変えられたことです。まだ改善したいところはあります。変換後の容量比較をもっと見やすくしたり、変換前後のプレビューを入れたり、出力先を選べるようにしたりすると、さらに使いやすくなりそうです。
でも、生活を便利にする目的としては十分でした。Googleフォトに入れる前に、写真と動画を少し整える。家族の写真を残すための作業が、少しだけラクになる。そのくらいの道具を自分で作れるようになったのが、今回の一番の収穫です。

