テクノロジー · 実用ガイド
Immich の Live Photo が静止画で保存されるとき:メタデータを変える前にペアを確認
Immich 上での再生、ファイル内の識別子の一致、画像の保存は、それぞれ別のことを示します。静止画だけのダウンロードを復元済みのバックアップと見なす前に、元のペアと「写真」に復元された項目を確認しましょう。

Immich では動く Live Photo が、Apple の「写真」に新しく保存すると静止画にしかならない場合、Live Photo の復元はまだ確認できていません。元のファイルを保管してください。まず静止画と対応する動画が両方あるか確認し、実際のファイル形式と関係する識別子を調べてから、「写真」に復元された項目を確認します。最初に行うのは UUID の変更ではありません。
この確認を分けるべき具体的な理由があります。私たちが調べた v3.2.1 と v3.3.5 の Immich モバイル版の保存サービスでは、「写真」のエラーを扱う分岐の一つが静止画だけの保存を試み、その結果が null でなければ成功として扱います。これは代替処理があることを示すソースコード上の証拠です。あなたの結果がその処理によって起きたことや、すべての完了メッセージがこの戻り値に基づくことを示すものではありません。
サーバー上の関連付け、ファイルのペア、復元された Live Photo は別々の証拠
Immich は画像を動画に関連付け、自身のビューアーでその動きを再生できます。これはサーバー側の状態を確認するものです。ダウンロードしたファイルが2つあることは、素材の保管についての確認です。新しい項目が Apple の「写真」で Live Photo として動くことが、実際に知りたい復元の確認になります。前の観察結果を、そのまま次の確認の代わりにしてはいけません。
Apple は、動画のコンテンツ識別子と、それに対応する静止画の Exif MakerNote 内のメタデータが関連付けられると説明しています。一方、Immich 自身のリンクはデータベース上の関係です。したがって、Immich で2つのアセットを再リンクしても、それだけでは埋め込まれた Apple のメタデータが変わったことや、「写真」がそのペアを受け入れられることの証拠にはなりません。
元の素材を保管し、どの経路で失敗したか記録する
アーカイブ、または元ファイルを取得するダウンロードから、静止画と対応する動画のコピーを用意して作業します。2つを別のフォルダーにまとめて保管してください。書き出されたのが静止画だけなら、まず対応する元の動画を探します。スクリーンショット、プレビュー、拡張子を .MOV に変えたファイルでは、失われた動きのデータを補えません。修復を試みるために、Immich が管理する保存領域内のファイルを変更しないでください。
Immich のサーバーバージョン、モバイルアプリのバージョン、iOS のバージョンを記録し、その結果がモバイル版の Save、Web からのダウンロード、別の書き出し方法のどれによるものかも残します。元が Apple の Live Photo なのか Android のモーションフォトなのかも記録してください。このガイドで扱うのは Apple への復元であり、異なるプラットフォーム間でのモーションフォト変換が成功すると約束するものではありません。
何も書き換えずにファイル形式と識別子のグループを調べる
ExifTool をインストールしたら、`exiftool -ver` に続けて `exiftool -a -G1 -s -FileType -ContentIdentifier "photo.JPG" "photo.MOV"` を実行します。引用符で囲まれた2つのパスは、用意したコピーのパスに置き換えてください。これらのオプションはメタデータを読み取ります。出力ではファイルごとの区切りとグループ名を残します。ファイル名の末尾が .MOV であることは、ファイル形式を調べた結果の代わりにはなりません。
調べた iPhone のサンプルでは、静止画に [Apple] ContentIdentifier、動画に [Keys] ContentIdentifier がありました。この値同士を比較します。見た目が似ているという理由だけで、ImageUniqueID、ファイル名にある UUID、関係のない XMP の値で代用しないでください。グループがない、複数の値が矛盾する、ツールがファイルを読み取れない場合は、その不確実さを記録し、正しいペアだと判断しないようにします。
実際の失敗報告に付いた2組のサンプルから、一つの修復手順では足りないことが分かる
私たちは Immich の issue 14066 と 15805 に添付された公開 JPEG/MOV アーカイブを、ExifTool 13.59 で調べました。どちらにも JPEG と MOV が含まれていました。1組目では Apple/Keys のコンテンツ識別子が異なり、2組目では一致しました。読み取りだけの調査の前後に SHA-256 を確認し、4ファイルすべてが変更されていないことも確かめています。
この結果が示すのは、提供されたファイルの分類です。元の失敗原因を診断した結果ではありません。issue 14066 にはタスクの記録が見つからないエラーも含まれていました。issue 15805 は、後に行われた動画ダウンロード URL の誤りの修正で、明示的に対象とされています。私たちは iOS や macOS での復元を実行していません。また、サーバーから書き出したペアが正しくても、以前のモバイル版が実際にどのデータをダウンロードしたかまでは分かりません。
実際に確認できた証拠から、次の行動を選ぶ
動画がない、読み取れない、実体は別の画像だったという場合は、ペアを組み直す前に、本来の元ファイルを回収します。関係する識別子がない、または異なる場合は、元のアーカイブと書き出し履歴に戻り、どの静止画と動画が対応しているかを確かめます。同じベース名や近い撮影時刻は手掛かりですが、任意に選んだファイルの識別子を上書きしてよい根拠にはなりません。
関係する識別子が一致する場合は、UUID の置き換えを万能の修復として扱うのをやめます。そのペアを保管し、ダウンロードの経路と「写真」への保存処理を調べてください。既存の修復ツールはファイル間で識別子をコピーできますが、それで動画や残りのメタデータが正しいこと、Apple が受け入れることまで保証されるわけではありません。識別子が一致しているのに復元が失敗するなら、同じ値を書き換え続けるのではなく、さらに適切な証拠を集める必要があります。
過去のクライアント修正と、静止画を保存する代替処理を区別する
ここでは既知のクライアント修正が2つ関係します。PR22708 は、動画のリクエストに静止画の URL を使っていた問題を修正しました。PR29952 は、完了した Live Photo のダウンロードタスクのグループ化と、コールバック同士の動作を修正しました。これらは、元のペアの識別子とは別に、ダウンロード処理に問題が起こり得ることを示します。どちらの修正も、その後に報告された静止画だけになるすべてのケースの原因を証明するものではありません。
調べた v3.2.1/v3.3.5 の保存コードは、コードが PHPhotosErrorDomain で始まるエラーを今も捕捉し、saveImageWithFile を試み、その静止画の保存でアセットが得られたかどうかを返します。この真偽値を、すべての UI の状態表示まで追跡したわけではありません。ここから導ける結論は限定的です。転送の進捗と静止画の保存だけでは、Live Photo が完全に復元された証拠として不十分です。古いパッチをそのまま当てるのではなく、バージョンを記録し、サポートされる更新を行った後で、元ファイルを保管した1例を再確認してください。
Apple の「写真」で、新しく復元された項目を確認する
ライブラリに以前からあった正常なコピーではなく、今回の復元で作られた項目を調べます。iPhone では、Apple の現在の手順で Live Photos は 「写真」→「コレクション」→「メディアタイプ」→「Live Photos」 にあります。項目を開いて長押しし、再生を確認してください。「写真」に Live の操作が残っている場合は、動きが失われたと判断する前に、Live の効果がオフになっていないか確認します。
単独で再生できる MOV は、保管できている有用な素材です。ただし、それだけでは「写真」に一つの Live Photo として復元されたことを示せません。使う予定の端末と手順でこの確認に合格するまで、元ファイルを保管してください。テスト用のまっさらな状態を作るだけのために、唯一の正常なコピーを削除してはいけません。元の素材を別に保管できている既存の失敗例、または利用できる場合は分離したテスト先を使います。
回復を実際以上に表現しない完了記録を残す
確認した例について、各バージョン、書き出し経路、2つのファイル形式、関係する識別子が一致したかどうか、そして「写真」で実際に再生できたかを残します。サポートへの報告では、「元の動画がない」「両方の素材は保管済みだが復元は未確認」「この端末で復元して再生できた」を区別すると役に立ちます。エラーが出た場合は正確な内容を添え、エラーがないだけで Live Photo として保存されたと考えないようにします。
この手順は次の判断を絞り込むためのものです。存在しない動画フレームを回復したり、識別子が一致するすべてのペアを正しいと保証したりするものではありません。目標は、復元結果を正確に把握し、元の素材を保管することです。まだ復元が必要な Live Photo の残されたコピーを、サーバー上で再生できるという理由だけで捨てないでください。
