Takeout JSON
JA

パソコンから Android に写真を日付を変えずにコピーする方法

ふつうの USB「ファイル転送」でコピーすると、写真の日付が今日になります。パソコンから Android スマホに、1 枚 1 枚の日付を保ったまま写真をコピーする方法を説明します。

Android スマホに写真を日付を変えずにコピーするには、ふつうの「ファイル転送」ではなく adb push を使います。adb push はファイルごとの日付を保ちます。「ファイル転送」(MTP)のコピーでは、日付がコピーした時刻になります。写真の中に撮影日時がある写真は、どちらの方法でも正しく並びます。スクリーンショット、スキャン、チャットの画像のように撮影日時がない写真は、adb push でコピーしたときだけ、ギャラリーで元の位置に並びます。

ふつうのコピーで日付が変わる理由

スマホをパソコンにつないで「ファイル転送」を選ぶと、スマホはドライブのように表示されます。でも中身はドライブではありません。MTP という方式で通信していて、ファイルの中身だけをコピーし、あとはスマホが決めます。スマホは新しいファイルそれぞれに、今の時刻を付けます。

ギャラリーは写真を撮影日時で並べます。撮影日時は写真の中にあるので、MTP では変わりません。ところが、撮影日時のない写真はたくさんあります。

  • スクリーンショットと画面録画
  • WhatsApp、Telegram、Signal、ブラウザから保存した画像
  • スキャンした画像と編集したコピー
  • ほかのアプリで作られた動画のほとんど
  • Google Takeout のように、プログラムがメタデータを消してしまった写真

こうした写真では、ギャラリーはファイルの日付を使います。MTP でコピーしたあとは、それが今日です。10 年分のスクリーンショットが、コピーした日にまとめて並んでしまいます。

1,296 枚の写真を MTP で vivo のスマホにコピーして試したところ、すべてのファイルがコピーした日の日付になりました。

日付を保つ方法:adb push

adb は、Android スマホとやりとりするための Google の無料のコマンドラインツールです。その push コマンドは、日付を保ったままファイルをコピーします。準備は 1 回だけで、あとは 1 行でコピーできます。

  1. スマホで USB デバッグをオンにします。「設定」→「デバイス情報」で「ビルド番号」を 7 回タップし、「設定」→「開発者向けオプション」で「USB デバッグ」をオンにします。メーカーごとの手順は Android で USB デバッグをオンにする方法 にあります。
  2. adb を用意します。 Google の Android デベロッパーサイトから「SDK Platform-Tools」をダウンロードして展開します。Linux では、パッケージマネージャーに adb または android-tools という名前であります。
  3. スマホをつなぎ、ロックを解除して、「USB デバッグを許可しますか?」と表示されたら「許可」をタップします。認識されたか確かめます。
adb devices
  1. フォルダーを DCIM にコピーします。 どのギャラリーアプリも DCIM を見ます。
adb push "C:\Users\you\Pictures\2016" /sdcard/DCIM/

Mac や Linux では、パスは ~/Pictures/2016 のようになります。adb はサブフォルダーも含めて、フォルダーをまるごとコピーします。

  1. ギャラリーに読み直させます。 新しいファイルはたいてい数分で表示されます。Android 10 以降ですぐに反映させるには、次のコマンドを使います。
adb shell content call --uri content://media/ --method scan_volume --arg external_primary

うまくいったか確かめる

adb shell stat -c '%y %n' "/sdcard/DCIM/2016/*"

ファイルごとに、今日ではなくそれぞれの日付が表示されれば成功です。ギャラリーを開いてさかのぼると、写真が本来の日に並んでいます。

3 つの落とし穴

大文字と小文字だけが違う名前。 スマホのストレージは大文字と小文字を区別しません。2 台のカメラの IMG_0001.JPG と IMG_0001.jpg は、スマホでは同じ名前になり、あとからコピーしたほうが何も言わずに前のファイルを上書きします。私たちのテストでは、43 枚の写真がこうして失われるところでした。コピーする前に、どちらかの名前を変えてください。

空き容量。 コピー中に容量が足りなくなっても、スマホは警告しません。先に空き容量を確かめてください。adb shell df -h /sdcard

パソコンの上ですでに日付が間違っているファイル。 adb push はファイルが持っている日付をそのまま保ちます。ダウンロードや展開のあとのように、その日付がすでに間違っているなら、先に直すか、あとでスマホの上で設定します。adb で Android の写真のファイルの日付を直す方法 をご覧ください。

コマンドを使わずに同じことをする

「Takeout JSON Metadata Fixer」の Windows 版には「Android スマホ」タブがあります(Android の機能は Windows 版のみです)。USB デバッグの手順を 1 つずつ案内し、Google の adb を自動でダウンロードしてから、フォルダー、Google Takeout のエクスポート、.zip のアーカイブを、すべて正しい日付のままスマホに送ります。

送る前に、写真ごとに撮影日時を読み取り、それをスマホでのファイルの日付にします。そのため、パソコンの上ですでにファイルの日付が間違っていた写真も直ります。IMG_0001.JPG と IMG_0001.jpg のように重なる名前は上書きせずに名前を変え、スマホにすでにある写真は飛ばし、先に空き容量を確かめ、最後にギャラリーに読み直させます。

よくある質問

Galaxy の Smart Switch は日付を保ちますか?

Smart Switch はスマホからスマホへデータを移すツールで、その場合は日付を保ちます。パソコンにある写真を移すためのツールではありません。adb push かアプリを使ってください。

SD カードなら日付は保たれますか?

カードリーダーでカードにコピーすると、パソコンがカードに直接書き込むので、たいていファイルの日付は保たれます。そのあとカードをスマホに入れます。ただし、今は SD カードを使えないスマホも多いです。

USB デバッグはオンのままにしておく必要がありますか?

ありません。終わったら「開発者向けオプション」でオフにしてください。「開発者向けオプション」そのものをオフにすることもできます。

写真は Google フォトにアップロードされますか?

コピー先のフォルダーを Google フォトがバックアップしていれば、されます。アップロードしたくないときは、先にバックアップをオフにしてください。