Immich に取り込んだ写真の日付がおかしい?取り込んだ日になる原因と、取り込み済みでも直す方法
Immich のタイムラインで写真が取り込んだ日に固まる、時刻が数時間ずれる原因を説明します。Immich が日付を決める順番、Google Takeout や LINE・スキャン画像での原因、ファイルを直してメタデータを読み直させる手順です。
Immich を立ち上げてライブラリをアップロードしたら、タイムラインがおかしい。何千枚もの写真が取り込んだ日の日付になっている。昔の旅行の写真がいちばん上にある。一部はちょうど数時間だけずれている。
原因はほぼ決まっていて、すでに取り込んだあとでも直せます。
Immich は日付をどう決めるか
Immich は各ファイルのメタデータを読み、決まった順番で最初に見つけた日付を使います。おおまかには、ファイルの横に XMP サイドカーがあればそれ、次に EXIF の DateTimeOriginal、次に動画の CreateDate、最後の手段としてファイルの更新日時です。
Immich はファイルを読むだけで、あなたに尋ねません。EXIF の日付がない写真はファイルの日時になり、ファイルの日時は最後にコピーした操作が残したもの、たいていは今日です。この 2 つの日付の違いは 写真の「撮影日時」と「更新日時」の違いは? で説明しています。
Immich 純正のアップローダー、つまりモバイルアプリと CLI は、ファイルの更新日時を一緒に送ります。それも間違っていれば、写真を救うものは何も残りません。
よくある原因
いちばん多いのは Google Takeout です。Google は多くの写真から EXIF の日付を外し、本当の日付をファイルの横の .json サイドカーに入れます。Immich は Google の .json の形式を読みません。そのままアップロードすると、EXIF のないファイルはすべてアップロードした日になります。この場合の手順は Google フォトから Immich へ移行して撮影日を正しく表示するには? にまとめました。
メッセージアプリの画像も原因になります。WhatsApp などは EXIF をまるごと消します。LINE で受け取った画像も同じで、残るのはファイルの日時だけです(LINE で保存した写真の日付がおかしい理由)。
スクリーンショットとダウンロードした画像。PNG やウェブの画像に EXIF の日付があることはまれです。
スキャンした写真。入っているのはスキャナーの日付、つまりスキャンした日で、撮った日ではありません。
タイムゾーンのずれ。EXIF の日付はあってもタイムゾーンのオフセットがない写真は、処理の経路によって UTC 扱いになったり現地時刻扱いになったりします。日付は正しく、時刻だけずれます。新しいスマートフォンはオフセットのタグも書くので、この問題は起きません。
直し方は 2 つ
Immich の中で直す。ウェブ画面で写真を選び、日付と時刻を編集できます。選んだ分ずつの作業です。数枚ならこれで十分です。Takeout の 4 万枚には向きません。しかも、直した日付は Immich のデータベースの中にしかありません。あとでライブラリを書き出すと、日付はまた消えます。
先にファイルを直す。アップロードの前に、正しい日付を各ファイルの EXIF に書き込みます。Immich はそれを読んで正しく並べ、あとでそのファイルを渡すほかのツールも同じように正しく読みます。長く持つのはこちらの直し方です。
immich-go を使うのはどんなときか
immich-go は、Google Takeout を理解する無料のコマンドラインのアップローダーです。.json サイドカーを読んでファイルと突き合わせ、アップロードと一緒に正しい日付を Immich に送ります。行き先が Immich だけで、ターミナルに抵抗がなければ良い道具です。アルバムも扱えます。
ただし、ファイルそのものは変えません。日付が入るのは Immich のデータベースで、写真の中ではありません。いつかまた移行したり、同じファイルを PhotoPrism や Apple の「写真」に渡したりすると、最初からやり直しです。
手でファイルを直す
exiftool は Takeout の日付を EXIF に書き込めます。ただ、Google のサイドカーの名前はいくつかの点で写真の名前と一致しないので、コマンドは手間がかかります。具体例は exiftool で Google Takeout の日付を直す方法 にあります。
サイドカーも EXIF もないが、ファイルの日時は正しい写真は、ファイルの日時を EXIF にコピーします。
exiftool "-DateTimeOriginal<FileModifyDate" -if 'not $DateTimeOriginal' -r .
日付だけ分かっていて、ほかに何もないフォルダーは、日付を設定します。
exiftool -DateTimeOriginal="2014:08:10 12:00:00" -overwrite_original .
そのあと、Immich の管理画面からメタデータ抽出のジョブを実行し直すか、アップロードし直して、新しい値を読ませます。
アプリでやる
Takeout JSON Metadata Fixer は、Immich がきれいに取り込めるフォルダーを用意します。すべてのファイルに本当の日付と GPS を書き込むので、Immich は EXIF から直接読めます。
Takeout のエクスポートを 1 つの zip でも複数の zip でも、ほかのどんなフォルダーでも渡せます。アプリは写真ごとに .json サイドカーの日付を使い、なければ EXIF、それもなければファイルの日時を使い、その結果をファイルの EXIF と日時に書き込みます。GPS も同じように入ります。途中で HEIC を JPG に変換することもできます。日付がまったくない写真には、フォルダー単位で日付と場所を 1 つ設定できます。
設定を有効にすれば、出力する各ファイルの横に .json サイドカーも書き出します。Immich 自体はそれを読みませんが、immich-go などの取り込みツールは読みます。どのライブラリの外でもメタデータを読める状態に保てます。そのあと、出力フォルダーを Immich のアプリ、CLI、または外部ライブラリでアップロードします。日付はファイルに入っているので、最初から正しく並びます。
Mac、Windows、Linux でオフラインで動き、画面は日本語です。最初の 1000 枚は無料で、無制限は 19.99 米ドルの買い切りです。
よくある質問
もう取り込んでしまいました。最初からやり直しですか?
そうとは限りません。ディスク上のファイルを直し、Immich の管理画面で全アセットに対して「Extract metadata」(メタデータの抽出)ジョブを実行します。ただし外部ライブラリではなくアップロードした写真なら、Immich は自分のコピーを持っているので、直したファイルをアップロードし直して古いコピーを削除する必要があります。
一部の日付が数時間ずれるのはなぜですか?
タイムゾーンです。EXIF の日付にはオフセットがなく、Immich はバージョンや設定によって UTC かサーバーの時刻として扱います。新しいバージョンほどうまく扱います。写真の多くを撮った地域にサーバーのタイムゾーンを合わせると改善します。詳しくは 写真の時刻が数時間ずれるのはなぜ? にあります。
Immich は今は Google の .json を読みますか?
この記事を書いた時点では、直接は読みません。読むのは XMP サイドカーです。immich-go は Google の形式を読んで、その場で変換します。これは変わることがあるので、Immich のリリースノートを確認してください。
EXIF を直すと画質は変わりますか?
変わりません。EXIF の書き込みはメタデータの領域だけを編集します。圧縮された画像には触れません。