4 ポイント 投稿者 GN⁺ 2024-01-06 | 1件のコメント | WhatsAppで共有
  • iCloudストレージが200GBの上限に近づき、写真だけで約 127GB を占めるようになったため、1TBへのアップグレードではなく、大きな動画を自分で探して削除する回避策を試した
  • Apple PhotosとiCloud Webには ファイルサイズ順の並べ替え がなく、別アプリでもiCloudにオフロードされた写真が0Bのように表示され、整理の基準として使いにくかった
  • iCloud Photos Webの動画再生時間バッジが video-text-badge というHTML要素である点を利用し、JavaScriptで長い動画を見つけて 赤い枠 で表示した
  • 30秒超の動画をダウンロードして削除したところ、ダウンロードしたファイルは約 7GB だったが、iCloudストレージは約 55GB 減るという予想外の差が出た
  • 新しい4K動画ではファイルサイズとiCloudの表示変化がほぼ一致したが、古い動画は実際のファイルよりiCloud上で大きく計上され、古い大きな動画 が整理の優先対象になり得る

iCloud Webで長い動画を抽出する

  • Appleのストレージ警告の後、200GBから1TBに上げると料金が3倍以上に跳ね上がるため、代替策を探し始めた
  • ストレージの大半は写真で、約 127GB を占めていたが、Apple PhotosとiCloudブラウザには写真を ファイルサイズ順 に並べ替える機能がなかった
  • 重複写真や動画ファイルサイズを表示するアプリも、iCloudにオフロードされた写真を0Bのように表示し、実際の整理にはあまり役立たなかった
  • iCloud Webサイトの Photos -> Media Types -> Videos に移動した後、画面をできるだけ縮小して多くの動画を一度に表示させた
  • 各動画の再生時間バッジがHTML要素ならJavaScriptで検索・フィルタリングできると考え、長い動画を強調表示するコードを書いた
    • 再生時間バッジのクラスは video-text-badge
    • ページ内のバッジを探して再生時間基準で並べ替え、特定のしきい値を超える項目を強調表示する
    • iCloudは画面に読み込まれた要素だけを取得するため、新しくスクロールで入ってくる要素も処理できるよう、タイマーで繰り返し実行する
  • 使い方は、iCloudページでJavaScriptコンソールを開き、gist全体を貼り付ける方式
  • 結果として20秒より長い動画が赤い枠で表示され、複数の大きな動画を選択してダウンロードした後、削除しやすくなった

削除後のストレージ変化と2回の実験

  • スクリプトでiCloud動画のうち 30秒超 の項目をすべて削除したところ、ダウンロードした動画は約7GBだったが、iCloudストレージは約55GB減った
    • ダウンロードした全動画はディスク上で8GBを占めた
    • iCloud使用量は199GBから143GBに減った
  • 1回目の実験では、動きの多い 4K動画 をアップロードしてiCloudストレージの反応を確認した
    • アップロードしたファイルサイズは281MB
    • アップロード後のiCloud使用量は145.33GB
    • ダウンロードして削除した後も、ファイルは依然として281MB
    • 削除後のiCloud使用量は145.6GBと表示され、表示値の差は約270MB程度だった
  • 2回目の実験では、古い動画の中からiCloudが大きなファイルとして表示する短い動画を選んで確認した
    • iCloudはその動画を128MBと表示した
    • ダウンロードしたファイルは47MBだった
    • 削除前のiCloud使用量は145.29GB、削除後は145.12GBで、約170MB減った
  • 約7GBのファイル削除で7倍を超えるストレージが解放され、古い大きな動画は実際のファイルよりiCloud上で大きな ストレージ占有量 を持つようだった
  • 原因は確認できていないが、結果として 50GB以上 のiCloudストレージを確保でき、同じ作業を再び行うための小さなJavaScriptスクリプトが残った

1件のコメント

 
GN⁺ 2024-01-06
Hacker Newsのコメント
  • Photos.appではファイルサイズが表示されないため、大きなファイルを見つけるPhotos.app拡張や別アプリを作ろうかと思った。
    しかしAPIは「ファイルサイズ」を公開していないようで、少なくとも簡単な方法は見つからなかった。
    「写真」や「動画」は、基盤となる「photo or video object」を表示するビューに近いと考えている。動画をトリミングしても元のフル動画は残っており、書き出しをして初めて、トリミング後の小さい実ファイルが作られるようだ。
    そのため、ファイルサイズの見え方が違うのだと思う。さらに、誰かがファイルサイズを取得するAppleScriptを作ったとのこと: https://discussions.apple.com/docs/DOC-250000422

    • その通りで、Photosアプリは未変更の元ファイルを保持し、編集やトリミング情報は別途保存する。いつでも元に戻して再編集できるので、編集前後の同じ画像を複数保持している可能性もある。
      「ファイルサイズ」はどのAPIで探していたのか気になる。
      PhotoKit APIでPhotos.appからサイズデータを取得できた: https://alexwlchan.net/2023/finding-big-photos/
      約2.6万件ある自分のライブラリでしか試していないが、最大の項目を探す指標としては有用だった。ただし、1GBの動画を書き出したときにiCloud使用量が1GB減るかどうかは確認していない
    • これに加えて、まだ詳しく見ていないが、RAW+JPG写真を取り込むと「オリジナル」をどちらか一方に設定できる。メニューを確認しないと、どちらが使われるのか分からないまま取り込みや編集ができてしまう。
      そのため、ライブラリではサムネイル1枚に見える取り込み直後の写真が、実際には5MBかもしれないし50MBかもしれない
    • コードを書くつもりがあるなら、内部データベースを確認したか気になる。最後に見たときはただのsqliteで、ざっと眺めるだけでもある程度理解できた
    • ファイルサイズが違う理由としては、これが最ももっともらしい。自分も予想外のメディア復元を見たことがある。動画をトリミングまたは編集したつもりでも、全長・全解像度のまま残っていた。
      iPhoneのストレージをあれほど神経質に管理しても、いつも限界近くになる理由の説明にもなる
    • https://github.com/RhetTbull/osxphotosで可能:
      osxphotos query --min-size 100MB --add-to-album "Big Files"
      100MBより大きいすべての写真と動画を見つけて「Big files」アルバムに追加する。
      詳しくは osxphotos query --help、ブラウザでドキュメントを開くなら osxphotos docs を参照。ちなみに自作ツールです
  • バグかもしれないが、場合によってはiCloudが同じファイルの複数バージョンを密かに保存している可能性もある。Appleは他のメディアファイルでも似たことをしているので。
    最後の例が興味深い:
    「iCloudでは動画が128MBと表示されていたが、ダウンロードしてみると実際の動画は48MBで、削除したら空き容量が約170MB増えた」
    これは、iCloudが単に例示ファイルのサイズを誤表示しているだけではないことを示唆している。128MBのファイルを削除したなら、iCloud容量も約128MBしか空かないはずだが、実際には表示サイズ128MBとダウンロード版48MBを足した176MBに近い容量が空いた。iCloudが空き容量を10MB単位で丸めて表示するなら、十分つじつまが合う

    • 差分バックアップや何らかのバージョン管理が、最も obvious な原因の1つに見えた。ファイル保持のために完全な重複保存をしている可能性もある。問題は、そのすべてが完全に不透明なことだ。
      結局、ストレージをあるサービスにどんどん囲い込まれることになり、総保存量ベースで定期課金されるのに、そのストレージをどう最適化すべきかの情報はほとんどない。固定の料金帯にとどまりたい、あるいはストレージ/コスト比を下げたい消費者の立場では、ただ手をこまねいて払い続けるしかないのかと思ってしまう。
      テック業界の現代的なビジネス戦略は、複雑さの陰に隠れることだ。コストは複雑すぎて理解しづらいし、内部情報を競合に見せすぎることになる、という理屈だ。しかし会社がコスト以上で運営されているかを確認するときには、そうした指標をどうにか算出している。消費者が理解しようとすると、突然「複雑すぎる」ことになる。
      問題は、技術が実際に複雑すぎる規模まで大きくなっていることが多く、経営層もそれを分かっているので、かなり有効な言い訳になっている点だ。そして都合よく、まさにその部分に投資を集中してマージンを乗せる
    • iPhoneでは、写真や動画の編集はメタデータにすぎず、元ファイルは保持される。たった今動画を撮影して半分にトリミングし、iCloudからファイルをダウンロードして試してみた。
      トリミング後のファイルはiCloud表示サイズより小さかったが、未変更のオリジナルをダウンロードするよう選ぶと、サイズはiCloud表示と一致した
    • 混乱の根本には、Photosライブラリ内の写真や動画が、単にストレージへコピーされたファイルではないという点もある。Photosは編集、レンダリング済みバージョン、サムネイル、アプリ機能に必要な各種データのためのメタデータも保存している。
      したがって、写真をiCloudに同期するときは個々のファイルだけが同期されるのではなく、Photosアプリが管理する「Photos Library」コンテナが同期される。
      FinderやFilesアプリで個別ファイルを直接追加した場合は、iCloudとローカルファイルシステムでサイズが正確に一致する
    • 実際にそういうケースかもしれないが、だからといって免責されるわけではない。
      ハードディスクやUSBメモリを買えば、一定のGBを好きなように使える。1GBのファイルを入れれば、空き容量は1GB減る。ファイルシステムによってはメタデータで数KB失うかもしれないが、どのファイルシステムを選ぶかはユーザー次第であり、保存装置に強制されるものではない。
      NANDコントローラがブロックマッピングテーブル保存のためにオーバープロビジョニング領域を数MB使っていたり、利便性のためにデータを重複保存していたりしても、ユーザーがそのオーバープロビジョニング領域のコストを請求されることはない。
      ここではHTTPでアクセスする保存装置を売っておきながら、1GBのファイルを書き込むと、自分たちの都合で複製・変換などを行い、ユーザーが頼んでもいないその複製物の保存コストまで請求している。これは新しく、予想外だ
  • このアイデア/解決策を TamperMonkey/Greasemonkey スクリプトにした
    基準に合わないすべての要素を「非表示」にする機能も追加した
    https://github.com/seffignoz/icloudcleanup

  • 私が セルフホスティングをする理由の1つがこれ。クラウド提供者の明確さと透明性を信用していない。セルフホスティングのソリューションのほうがずっと不安定で安全性が低く、性能も劣っていたとしても、おそらく乗り換えないと思う
    個人的には immich を使っている。iOS/Android アプリ、サーバーコンポーネント、同期/バックアップのオプションを備えた、かなり完成度の高いソリューションだ
    https://immich.app/

    • Apple はまだ、容量管理 UI がどれほど優れた販売機会かを理解していないようだ。ストレージをさらに売るには、これ以上ない場所だ
      Google はそうしている。https://one.google.com/storagehttps://photos.google.com/quotamanagement を見ると、削除する項目をうまく見つけさせ、最終的には削除に疲れてより多くのストレージを買わせようとする作りになっている
    • 面白そうではあるが、上の警告を見ると、もっと 安定するまで待ったほうがよさそうだ
  • iCloud は フル品質のオリジナルを保存し、スマホにはより低品質の最適化版をダウンロードする仕組みだと理解している
    iPhone の設定で Apple ID > iCloud > Photos に行くと、デフォルトで有効になっている「Optimise iPhone Storage」オプションがある
    このオプションの説明には、スマホの空き容量が不足すると、フル解像度の写真や動画は自動的により小さいデバイス向けバージョンに置き換えられ、フル解像度版はいつでも iCloud からダウンロードできるとある
    これはかなり合理的に見える

    • それでもダウンロードは 元のファイル を返すはずなので、ストレージ容量の差を説明する材料にはならない
    • 投稿者が新しいファイルをアップロードしてからダウンロードしたときにはファイルサイズの差が大きくなかったケースを説明できない。ファイルサイズの差は古い動画ファイルでしか起きないようだ
    • これは関係ない
      これは Settings > Manage storage で見られるスマホのストレージ容量の話で、クラウドストレージ とは無関係だ
  • 興味深い記事だ。私も似たような問題のせいで iCloud プランを上げる必要があったので、Apple にとっては修正の優先度が高くないのかもしれない
    RAW+JPEG で撮影すると Apple Photos は2つの画像を1組にまとめる。写真愛好家にとって極端に珍しいやり方でもなく、ライブラリに重複に近い写真が大量にたまらず、RAW と JPEG を簡単に切り替えられるので便利だ
    しかし、この結合方式と記事で説明されているファイルシステム設計のせいで、2つを簡単に分離して RAW だけを削除するのは不可能に見える。何年も経った今では絶対に触らない巨大な RAW ファイルが残っているのに、ずっと小さい JPEG は残したいので削除できない
    オリジナルを書き出してライブラリから削除し、その後 JPEG だけを再インポートするのがいちばん簡単そうだが、そうするとライブラリに蓄積してきた長年分のメタデータを失う
    だから結局プランを上げるしかない

    • ばかな質問かもしれないが、メタデータをエクスポートして再インポートすることはできないのだろうか? EXIF データ以外の メタデータ があるのか、それとも Apple が全部は書き出さないのかが気になる
      顔認識のような追加機能のことなら、JPEG を再インポートしたあとにアプリが再処理しないのだろうか?
    • オープンソースツールの osxphotos(https://github.com/RhetTbull/osxphotos) が役立つかもしれない。サードパーティの exiftool ユーティリティを使って メタデータを保持 したまま JPEG 画像を書き出せる:
      osxphotos export /path/to/export --has-raw --skip-raw --exiftool
      RAW ペアを持つすべての画像を書き出しつつ RAW コンポーネントはスキップし、exiftool(https://exiftool.org/) を使ってキーワードのようなメタデータを書き出した JPEG ファイルに書き込む。その後 Photos にドラッグするか、osxphotos import /path/to/export/* を実行して再インポートできる
      export と import コマンドには、エクスポート先ディレクトリなどを制御するほかのオプションも多い。osxphotos help export、またはブラウザでドキュメントを開くには osxphotos docs を使うとよい。ちなみに私が osxphotos の作者だ
    • 今まさに同じ状況ではないが、写真オタクなので結局自分も経験することになりそうで調べてみた
      File/Export Unmodified Originals を実行すると、RAW+HEIC とメタデータが入った別個のサイドカーファイルが書き出されるようだ。そのあと RAW ファイルだけを別に取り除いて HEIC ファイルをインポートすれば、サイドカーのメタデータファイルも自動的に取り込まれるという
      ただし編集内容は失われる。それでも somehow「copy edits」はできるようだ。技術に詳しい人なら AppleScript でこの過程を自動化できるかもしれない
      しかし、これは不必要に面倒で、Photos.app に内蔵されているべき機能だ。より高い iCloud 料金プランへ誘導する助けになるので、優先度が低いのは明らかに見える
    • 私も今まさに同じ立場で、この面倒な作業にまだ手を付けられていない。確かな解決策を探している
  • 驚いたことに、連休前にAppleから似たようなストレージ通知を受け取り、iCloudに置いておく代わりに、すべての写真・動画を自分のメディアサーバーへダウンロードすることにした。
    iCloudからアーカイブをダウンロードする簡単で直感的な方法はない。複数のマシンやデバイスを使って、少しずつ進めている。
    最近のAppleの変化の問題は、大した理由もなく価格を上げることだ。私たちはこれからも写真や動画を撮り続けるし、最新の技術や機能のせいでファイルサイズは大きくなり続けるしかない

    • データを取得する簡単な方法はある。ただ、少し分かりにくいところにある。
      Google Takeoutのように動作する。Mac、iPhone、iPad、PCで appleid.apple.com のApple IDアカウントページにログインし、「Data & Privacy」に進んで「Manage Your Data and Privacy」を選ぶ。
      次のページで「Get a copy of your data」に進み、「Get started」を選べばよい
    • 人生を変えるツール:
      https://github.com/icloud-photos-downloader/icloud_photos_downloader
    • 私はPhotoSync(https://www.photosync-app.com/home)でiPhoneの写真をNASにコピーしている。素晴らしいプログラムだ。
      必要ならiCloudから写真をダウンロードしたり、形式変換したりもできる。数日ごとに新しい写真をNASへ送って常にローカルコピーを維持し、これらのコピーは毎晩Backblaze B2にもバックアップしている。
      形式変換のおかげで、写真をHEIC+JPGのペアで保持でき、元データと使いやすい版を一緒に持てる。
      本当に欲しいのは、iCloud Driveにも同じことをしてくれるツールだ。そこにいろいろな資料を入れているのだが、納得できる形でバックアップする方法がなくて気になっている。Appleの推奨方法(https://support.apple.com/en-us/HT204055)はかなり物足りない
    • MacOSがあるならPhotosアプリはどうだろう? 私はiCloud Photo Libraryのローカルコピーを維持して、MacOS Photosアプリで同期している
  • 一番嫌なのは、200GBから2TBへ飛ぶ不自然な料金プランの区切りだ。多くの家族にちょうどよい500GBや1TBを段階的に支払う方法がない。
    ストレージがコモディティになった時代には、使ったGBごとに課金されるべきだ

    • そうすれば無料枠の補助にもできる
    • 必要なら200GBに50GB単位を好きなだけ追加できるようにすべきだ
  • 私のiCloudストレージを大きく圧迫しているのは、写真の「live」動画版だ。ごく短い動きの断片が付いている写真より、ファイルサイズのほうが大きい。
    今のところ見つけた対処法は、ファイルをローカルにダウンロードし、iCloudから削除し、ローカルの動画を消して、残った静止画像だけをアップロードし直すことだけだ。
    時間がかかるうえに雑で、途中で何かを消したり大事なものを失ったりしないか不安になる。
    実際に残しておきたい少数の「live」画像を見分けて保持できる程度の編集コントロールを提供しつつ、この処理を自動化してくれるツールがあるのか気になる

  • 私の読み方で合っているのだろうか?
    これが広く起きている現象なら、Appleがアップグレードを促すために数字を水増ししていると見なせて、訴訟につながる可能性もあるのではないか?
    法律の専門家ではないが

    • 元記事は、Photosにメディアを追加することが単なる「ファイルをコピーして保存」ではない点を考慮していない。Photosアプリにも他のアプリと同様に独自のPhotos Libraryファイル形式がある。
      写真や動画を追加すると、Photosアプリはそれらを解析し、編集履歴を含めてアプリが動作するために必要なさまざまなメタデータを保存する。最終的にそれがiCloudへ同期される
    • 写真や動画を新しいファイルとして保存せずにその場で編集すると、iOSは取り消しや復元のために元ファイルを保持する。PhotosやiCloudギャラリーのどこにも元ファイルは表示されない。それが理由かもしれない
    • 私もこの記事をそう読んだ。あるクラウドストレージから一定量のファイルをダウンロードして、別のクラウドにアップロードしてみれば、はっきりした差があるか確認できそうだ。
      AppleがiCloudでまだ古いファイルシステム形式を使っている可能性もある。登場してからかなり経っているし、保存形式を変えることに気を配っていなかったのかもしれない。古いアカウントの画像・動画が「古い」ドライブにある可能性もある