办公解决中心
行业资讯、办公新品

导出 Google Photos 照片的方法

Google Photos 以相册形式去管理,你会通过自带的 Album 功能,把相关的照片放在同一个相册下。

你将遇到三个问题:

  1. 重复
  2. Meta 弄乱
  3. 照片 Meta 文件不见了
    重复例如,去天津旅游,就建一个「天津」,把相关的照片放一起。问题是,谷歌同样把你的照片都放在一个个以日期为名的相册里。我 10 月 10 日去的天津,拍了张 food.jpg,旅程结束后,我把这张照片以及其他沿途拍的放在「天津之旅」相册中。此时food.jpg出现在了两个文件夹里:

    .
    ├── 2020-10-10
    │   ├── food.jpg
    ├── 天津之旅
    │   ├── food.jpg

    所以将所有照片导出的时候,你会有两张一样的照片。

    Meta 被移除

    使用官方工具 Google Takeout 导出所有照片时,照片的 Exif 数据被移除,并放到一个额外的 JSON 文件里。以上面的例子,导出 2020-10-10 的照片,会得到 .jpg 和 .json

    .
    ├── 2020-10-10
    │   ├── food.jpg
    │   ├── food.jpg.json
    │   ├── metadata.json

    JPG 和 JSON 一般以成双出现,有的时候 JSON 命名为 文件名.扩展.json(上面的例子),有的时候则是 文件名.json。每一个相册,还会有一份 metadata.json,记录相册的 metadata。

    谷歌把每一张照片原本的 Exif 数据(e.g. 地点、日期)抹掉,放到对应的 JSON 里。

    {
      "title": "IMG_7545.HEIC",
      "description": "",
      "imageViews": "0",
      "creationTime": {
        "timestamp": "158202xxxx",
        "formatted": "18 Feb 2020, 10:35:07 UTC"
      },
      "modificationTime": {
        "timestamp": "158362xxxx",
        "formatted": "8 Mar 2020, 00:50:35 UTC"
      },
      "geoData": {
        "latitude": 25.382409333333334,
        "longitude": 169.39753444444445,
        "altitude": 78.39409156147392,
        "latitudeSpan": 0.0,
        "longitudeSpan": 0.0
      },
      "geoDataExif": {
        "latitude": 22.242533333333334,
        "longitude": 114.15739444444445,
        "altitude": 80.11492156147392,
        "latitudeSpan": 0.0,
        "longitudeSpan": 0.0
      },
      "photoTakenTime": {
        "timestamp": "1581511593",
        "formatted": "12 Feb 2020, 12:46:33 UTC"
      }
    }

    如果不管 JSON 直接导入到新的照片服务,你照片会没有日期、地点,时间次序是错的。

    :有些照片我的 Exif 丢了,有些照片则没丢。可能和是否使用原图上传的设置有关,可能压缩后,就会把原本的 Exif 移除掉,变成 JSON。

    JSON 并非一一对应

    导出后,JSON 并不一定有与之一一对应的照片。有可能有照片,却不见了 JSON;也可能有 JSON,却没找到照片。

    Google Takeout 在导出照片时,会把所有数据根据总体大小切割成一份份 .zip 文件,有可能在分割的过程里,JSON 和照片归在不同的 ZIP 中。解压后,自然在不同文件夹。

    导出方法

    我摸索后,发现有两种方法:

    • 先导出,后处理
    • 先处理,后导出(我的做法)

    第一个方法,偏技术性,需要用到命令行。第二个方法是我用的方法,比较简单,不过重复性的动作较多。

    无论前者还是后者,你都需要从 Google Takeout 导出数据:

    1. 去 Google Takeout
    2. 选取需要的相册后,导出
    3. 下载解压

    先导出,后处理(第一个方法)

    (当时进行迁移时,网上还没有那么多关于 Google Photos 导出教程,所以我自己并没有使用这个方法。)

    简介:在 Google Takeout 一键导出,然后治理照片重复以及 Exif 问题。这需要使用第三方开源工具 ExifTool,将 JSON 里的信息再次转换为图片的 Exif。

    先导出

    Google Takeout 导出时,应该全选所有相册,避免有漏掉的照片。下载并解压后,得到庞大的文件数量,我四年的数据导出时生成了八万多个文件(照片、视频、JSON)。

    ├── 2018-05-27-28
    │   ├── IMG_20180528_122431.jpg
    │   ├── IMG_20180528_122431.jpg.json
    │   ├── IMG_20180528_132828.jpg
    │   ├── IMG_20180528_132828.jpg.json
    ├── 2019-06-29
    │   ├── IMG_20190629_161802.jpg.json
    │   ├── IMG_20190629_161804.jpg.json
    │   ├── IMG_20190629_161809_Bokeh.jpg.json

    能看到有些文件夹(e.g. 2019-06-29)只有 JSON,而没有与之对应的照片。接下来,把 JSON 里的内容合成到原本照片里。

    后处理

    首先,安装免费开源工具 ExifTool,支持 Windows、macOS 和 Linux。macOS 用户可以使用 Homebrew 下载 brew install exiftool

    我们通过这个工具来对照片的 Exif 进行读写,将 JSON 信息抽取出来,写到 Exif 中。

    用到的命令如下,按需修改。

    如果文件名为 文件名.扩展.json,使用的代码格式为:

    exiftool -tagsfromfile '%d/%F.json' '-ImageTag<JsonTag' FileOrDir

    否则,文件名为 文件名.json,则使用:

    exiftool -tagsfromfile '%d/%f.json' '-ImageTag<JsonTag' FileOrDir

    替换 FileOrDir 成你的目标位置(或文件);替换 ImageTag 成 Exif 定义的标签;替换 JsonTag 为 JSON 文件中的标签。例如:

    ImageTag JsonTag 一对
    ImageDescription Description '-ImageDescription<Description'
    DateTimeOriginal PhotoTakenTimeTimestamp '-DateTimeOriginal<PhotoTakenTimeTimestamp'

    注意:谷歌不断更改 JSON 里标签的命名方法,请查看 Google Takeout 导出 JSON 中标签的最新命名方法记得更改对应的 JsonTag

    使用一条命令循环所有子目录,读取根目录下所有文件和子目录中的文件 JSON 中不同标签:

    exiftool -r -d %s -tagsfromfile "%d/%F.json" "-GPSAltitude<GeoDataAltitude" "-GPSLatitude<GeoDataLatitude" "-GPSLatitudeRef<GeoDataLatitude" "-GPSLongitude<GeoDataLongitude" "-GPSLongitudeRef<GeoDataLongitude" "-Keywords<Tags" "-Subject<Tags" "-Caption-Abstract<Description" "-ImageDescription<Description" "-DateTimeOriginal<PhotoTakenTimeTimestamp" -ext "*" -overwrite_original -progress --ext json FileOrDir
    • -r 循环子目录
    • -ext "*" 表明包含所有文件类型,可以改成 -ext "jpg" 或者 -ext "mp4" 限定修改特定文件类型
    • --ext "json" 表明剔除类型为 JSON 的文件
    • 读者如果需要更多关于工具的操作方法,可以参考 ExifTool 的指令文档

    这会更改所有照片的 Exif,记得备份好原本下载的 ZIP。

分享到:更多 ()