Takeout JSON
ZH

怎么批量修改照片拍摄日期、GPS 位置和文件名?几种办法对比

怎样修改照片的拍摄日期、时间、GPS 位置和文件名:一两张用系统自带工具,几千张的四种办法如实对比,再逐个讲软件的每个功能。

每张照片里面都带着一小块信息:什么时候拍的、在哪里拍的、用的什么相机,有时还有一段说明。这就是元数据,大部分存成一种叫 EXIF 的格式(EXIF 是什么(英文))。它错了或者没了,照片就会跑到错误的年份,地图上一片空白,相册按你拷贝文件的那天来排序。

这篇讲大家最常需要改的四样东西:拍摄日期时间GPS 位置文件名。从一张照片讲起,讲到整个照片库。

先弄清楚:错的是哪个日期?

照片有两种日期。拍摄日期在照片里面,存在 EXIF 里。修改日期属于文件,复制或下载文件时就会变。相册软件有拍摄日期时按拍摄日期排;没有的话,就退回用文件日期,2014 年的照片就是这样变成今天的。两者的区别见 拍摄日期和修改日期有什么区别

所以办法几乎总是:把正确的拍摄日期写进照片。只改文件日期,在你电脑上看着是对的,但大多数软件不理它,下次一复制又没了。

如果每张照片都差同样的几个小时,原因是时区,不是数据坏了。动手之前先读 照片时间差了几个小时

一张或几张:用你手头已有的

只有几张照片的话,不用装新工具。

  • Mac 上, 「照片」App 可以修改选中照片的日期和时间(「图像」菜单里的「调整日期与时间」),也可以设置位置(「图像」菜单里的「位置」)。修改存在照片图库里。在别处依赖这个修改之前,先导出一张测试照片,确认修改确实在文件里。
  • Windows 上, 右键点一个 JPG,选「属性」,再点「详细信息」,可以在那里输入新的拍摄日期。这对 JPG 文件有效,但不能加 GPS 位置。
  • Linux 上, digiKam 这类工具可以编辑选中照片的日期和地点。

要仔细地改单个字段,通用的 EXIF 编辑器是合适的工具。照片元数据编辑器对比(英文) 讲了 exiftool、XnView MP、digiKam 等。

这些工具一次处理一张照片很好用。到了几千张就又慢又容易出错,而且它们都不读 Google Takeout 放在每张照片旁边的 .json 文件。

几千张照片:真正可选的四种办法

要把日期、时间和 GPS 写回照片,现实中有四种办法。四种都能用,但适合的人很不一样。下面是如实的区别。

Takeout JSON Metadata FixerexiftoolGooglePhotosTakeoutHelper在线修复网站
Mac、Windows Linux 上都不用终端
照片始终不离开你的电脑
不用第二个工具就能把日期写进照片
把附属文件里的 GPS 写进照片
原始导出包保持不动
处理 Google 截断的附属文件名
列出没能配对的文件
写入前可以先试运行
HEIC 转 JPG
老的 AVI 和 WMV 视频转 MP4
重命名并按年月分文件夹
为 Immich 和 PhotoPrism 写新的附属文件
直接复制到 U 盘或安卓手机
照片数量不限也免费
开源

有两个叉是我们自己的,这才是真正的取舍。exiftool 和 GooglePhotosTakeoutHelper 免费又开源,这个软件两样都不是。如果这一点对你比表里其他任何一项都重要,就放心用它们。它们是好软件。

那些叉到底意味着什么

exiftool 是参考工具,几乎什么都能做,但命令要你自己写。Google 的附属文件名让这件事比论坛里那些一行命令看起来难:名字被截断到 46 个字符,新旧导出用不同的命名方式,重复文件的 (1) 放在不同的位置。你的规则一漏,exiftool 不会提醒你,它就是不动那张照片,你几个月后才发现。它默认还是就地修改,没有一份没动过的副本可以退回去。

GooglePhotosTakeoutHelper 免费,一直有人维护,整理导出包确实很好用。有两点常让人意外。它设置的是文件修改时间,不写 EXIF,它自己说明文档的最后一步就是再跑一遍 exiftool,把日期写进照片里面。而且它默认是移动你的文件,不是复制,说明文档对此说得很直白:中途出了问题,你得重新导出 zip。Windows 上双击 .exe 就行,但在 Mac 或 Linux 上你得进终端跑 chmodxattr,Apple 芯片的 Mac 还需要 Rosetta。

在线修复网站 上手最简单,却最说不过去。为了修日期,你得把自己所有的家庭照片上传到一个你一无所知的人的服务器上。300 GB 的照片库,也不是能上传两次的东西。

这个软件有什么不同

它一次运行就把日期、时间和 GPS 写进照片本身,不用第二个工具,不用敲命令。它读得懂 Google 用过的每一种附属文件命名方式,包括被截断的,结束时给你一份没能配对的文件清单,你知道照片库的真实状态,不用猜。想在动任何文件之前先看改动,可以试运行。它写进一个新文件夹,原来的导出包还在。

然后它接着做别人停下的事:HEIC 转 JPG、老视频转 MP4、重命名和文件夹模板、给 Immich 和 PhotoPrism 的附属文件,以及直接复制到 U 盘或安卓手机。

一切都在你自己的电脑上运行。没有账号,不上传,不用登录;地名查询关掉的话,它完全不发任何网络请求。前 1000 张照片免费,足够你拿同一个文件夹分别跑它和 exiftool 或 GPTH,自己比较结果。这才是用这张表的正确方式。

软件的功能,一个一个看

下面的截图是真实软件界面的局部,截的是英文界面。Mac、Windows 和 Linux 三个版本看起来几乎一样。每个开关都是可选的。

拍摄日期和时间

如果是 Google Takeout 导出包,日期和时间来自每张照片的 .json 附属文件。软件把它们写进照片的 EXIF,文件日期也改成一致。如果是其他文件夹,它取能找到的最可靠的日期:有附属文件就用附属文件,其次是照片里已有的日期,最后是文件日期。不会有照片变成空白日期。

有些文件根本没有可信的日期:老照片的扫描件、摄影师交付的照片、时钟从来没设过的相机。这种情况,来源选「任意文件夹」,打开「按文件夹设日期」。输入一个日期、一个地点,或者两者都填。文件夹里每一张照片和视频都会用你输入的内容,留空的项目仍按文件里的信息处理。见 扫描的老照片怎么设置日期

「按文件夹设日期」(Set the date and place myself)开关,适用于扫描件、摄影师交付的照片或时钟从来没设过的相机

GPS 位置

附属文件里的位置会作为 GPS 写回照片,苹果照片或手机上的地图就又有内容了。这一步不需要联网。用「按文件夹设日期」,你也可以给整个文件夹设一个地点:输入地名,比如 Lisbon(里斯本),或者直接输入坐标,跳过查询。见 给没有 GPS 的照片加位置(英文)

下面这个开关是另一回事。它把坐标变成地名,比如 Paris,用在文件名和文件夹名里。这个查询需要联网。发出去的只有大致坐标,不会发照片,也不会发文件名。

「查找地点名称」(Look up location names)开关,它把 Paris 这样的城市名加进文件名和文件夹,需要联网

文件名

从菜单里选一种命名方式:日期时间加地点、只有日期时间、原文件名加日期时间,或者「保留文件名」。

打开的文件名菜单,选项有 Date-Time + Location、Date-Time Only、Original + Date-Time 和 Keep Original Name,也就是日期时间加地点、只有日期时间、原文件名加日期时间、保留原文件名

写入之前,实时预览会显示一个真实文件会叫什么名字。

文件名和文件夹两个菜单,分别选了 Date-Time + Location(日期时间加地点)和 Year / Month(年/月),下面是生成路径的预览

你还可以在每个文件名前面或后面加上自己的词:姓氏、一次旅行的名字、档案编号。见 在文件名里加自定义文字(英文)按拍摄日期批量重命名照片(英文)

「在文件名中加入我自己的文字」(Add my own text to filenames)开关

文件夹

同一次运行可以把照片按年/月、按日、只按年、按地点或按旅行分进文件夹。也可以「保留我的文件夹」,或者不分文件夹。见 照片按年月整理进文件夹

打开的文件夹菜单,选项有 Year / Month、Year / Month / Day、Year Only、Year / Location、Year / Trip、Location / Year、Keep My Folders 和 No Folders,也就是年/月、年/月/日、只按年、年/地点、年/旅行、地点/年、保留我的文件夹、不分文件夹

选「年/旅行」(Year / Trip)的话,时间和地点都挨得近的照片会进同一个文件夹,比如 2024/Paris

选中了 Year / Trip(年/旅行),预览路径是 2024/Paris/2024-03-15-1430_Paris.jpg

照片说明

你在 Google 相册里写的说明只存在附属文件里。这个开关把它写进照片,其他软件就能读到。见 Takeout 丢了照片说明(英文)

「保留照片说明」(Keep photo captions)开关,已打开

横着的照片

有些照片只在读取旋转标签的软件里才是正的。这个开关直接把画面转正,所以任何看图软件和冲印店都会正着显示。本来就是正的照片不动。见 批量摆正横着的照片(英文)

「摆正拍歪的照片」(Turn sideways photos upright)开关

HEIC 转 JPG

HEIC 格式的 iPhone 照片不是哪里都能打开。这个开关把它们转成 JPG,日期、时间和地点都带过去。见 HEIC 转 JPG 保留拍摄日期

「HEIC 转 JPG」(Convert HEIC to JPG)开关,已打开

给 Immich 和 PhotoPrism 的附属文件

有些软件读的是 .json 附属文件,而不是 EXIF。这个开关在每张照片旁边写一个新的附属文件。导出到硬盘时它会自动打开。见 PhotoPrism 和 JSON 附属文件(英文)

「写入 .json 附属文件」(Write .json sidecars)开关

先拿一部分照片试

「只处理某个日期范围的照片」让你先做一年,检查结果。

「只处理某个日期范围的照片」(Only photos from a date range)开关

「试运行」会显示每一个新文件名、文件夹和日期改动,但什么都不写。它不占用 1000 张免费额度。

「试运行」(Dry run)开关:只预览,什么都不写,也不占用额度

结果

结束时你会看到多少张照片已整理、已转换、已定位,以及多少张有问题。没能配对的文件按名字列出来。软件把新的副本写进保存位置的文件夹,你的原始文件不会被改动。想退回去,删掉新文件夹就行。(也有一个就地重新整理文件夹的选项。它会替换原来的文件,所以先备份,或者先试运行。)见 照片元数据的修改能撤销吗(英文)

完成画面:全部整理完成(All organized),已整理 31、已转换 0、已定位 8、问题 0

在 Mac 上:直接从「照片」App 导出

Mac 版还可以把整个 Apple 照片图库作为来源。它先导出图库,再用同样的方式重命名和整理。iCloud 上的原图会按需下载。只有 Apple 允许这样做,所以这个功能只在 Mac 上有。

Mac 上的 Apple 照片(Apple Photos)来源,它导出整个 Apple 照片图库,并按需下载 iCloud 原图

这个软件不做什么

它不是逐个字段编辑的 EXIF 编辑器。你不能点开一张照片,输入一个新的相机型号或新的时间。它一次处理整个文件夹或整个导出包。要改单张照片的单个字段,用上面提到的编辑器。

它没有把所有时间统一挪几个小时的功能。如果你的时间都差同样的量,把电脑的时区设好,再跑一遍,做法见 照片时间差了几个小时

还有,像表里写的那样,它不是照片数量不限也免费,也不开源。前 1000 张照片免费,除了导出到安卓手机,所有功能都能用。高级版一次性 19.99 美元(应用商店会显示当地货币的价格),照片数量不限。如果你的照片来自 Google Takeout,Google 相册完整导出指南 从头讲完整个导出过程。