Takeout JSON

微信保存的照片没有拍摄日期,还能找回来吗?

微信发送图片时会压缩并去掉 EXIF,拍摄时间和位置一起丢失。讲文件里还剩什么、什么找不回来,以及怎样给一整个文件夹设日期。

家里人这些年在微信群里发的照片,你一张张存下来,或者手机把微信的图片文件夹也备份进了 Google 相册,现在它们混在整个相册里。每一张的日期都不对,没有一张有位置,文件名是 mmexport1563102330123.jpg 这样一串数字。

微信对照片做了什么

微信默认发的是压缩图。它把图片缩小、重新压缩,然后把元数据区块整个扔掉。EXIF 里的拍摄时间、相机型号、GPS 坐标,全没了。这是有意为之:省流量,也避免发一张照片就泄露自己的位置。

对方手机上收到的是一个全新的 JPEG,没有 DateTimeOriginal。它唯一的日期是文件自己的修改时间,也就是收到或保存的那一刻。

所以一张 2015 年拍的照片,2019 年转发给你,文件里只有 2019 年的痕迹,2015 年不在文件里。它不是丢了,是从来没被写进这个文件。任何工具都没法从文件里读出一个不存在的日期。

文件里还剩什么

保存时间。 微信保存到相册的图片,文件名里的那串数字通常是保存那一刻的毫秒时间戳。mmexport1563102330123.jpg 里的 1563102330 对应 2019 年 7 月 14 日。这不是拍摄时间,但对于当天拍当天发的照片(大多数家庭群的照片都是这样),误差不超过一天。

如果文件名没被改过,exiftool 可以把这个数字写进 EXIF:

exiftool -d %s "-DateTimeOriginal<${filename;s/mmexport(\d{10})\d{3}.*/$1/}" -ext jpg .

这之后,每个相册软件都会把照片排到正确的那天。

Takeout 附属文件里的时间。 如果这些照片经过了 Google 相册再由 Takeout 导出,旁边的 .json 文件里有一个 photoTakenTime。对微信自动备份的图片,Google 把它设成上传时间,通常也就是收到的那天。不完美,但一致。见 Google Takeout 里的 JSON 文件是什么

什么找不回来

真正的拍摄日期,如果发的人是拍完很久才发的。位置,永远找不回。相机型号,永远找不回。经过好几个人转发的照片,文件名里的时间是最后一跳的时间。

唯一的来源是发送者手机上的原始文件。重要的话,让对方重新发一次,用「文件」的方式发,或者勾选「原图」。以文件方式发送的图片是逐字节原样送达的,EXIF 和 GPS 都在。勾「原图」发送通常保留拍摄时间,位置信息不一定保留,收到后自己检查一下。

给一整个文件夹设一个日期

微信来的照片往往是成组的:某人发来的一场婚礼,父母分享的一次旅行,亲戚翻拍的老照片。你大致知道那是什么时候的事,想让它们全部落到正确的月份,具体几点几分无所谓。

用 exiftool,对一个文件夹:

exiftool -DateTimeOriginal="2015:06:20 14:00:00" -overwrite_original .

文件夹里每张 JPEG 都得到这个日期。知道地点的话再加 -GPSLatitude-GPSLongitude

提醒一句:微信的图片文件夹通常是混的。你自己拍了发出去的,和别人发给你的,放在一起。给整个文件夹设一个日期,只在这个文件夹就是一件事的时候才对。先按事件分文件夹。

把微信图片和主相册分开

很多人根本不想让这些进主相册。手机自动保存了每个表情包和每张转发的图,Google 相册又把它们全备份了。在 Takeout 导出里它们不难认:文件名以 mmexport 开头,EXIF 里没有相机型号。

整理的时候用「保留我的文件夹」而不是全部按日期打散,微信文件夹就还是独立的一块,以后再决定怎么处理。整理之前先把它们挪到单独的文件夹,是最简单的隔离办法。

用软件

Takeout JSON Metadata Fixer 不能凭空造出一个微信已经去掉的日期,也不会假装能。它做的是把两个诚实的选项变简单:用文件里有的日期,或者你自己设一个。

对一个微信图片文件夹,它先读 Takeout 附属文件(如果有),再读 EXIF,最后读文件自己的时间。微信图片前两样都没有,所以用文件时间,大多数手机上那就是保存时间。如果这个时间是错的,或者文件被拷来拷去已经变成今天,就用「按文件夹设日期」:给文件夹里每张照片设一个日期和一个地点,地点可以输城市名或坐标。软件把它们写进 EXIF,所以日期和地点会跟着照片去苹果照片、Immich 或任何别的地方。

它也顺便修文件名,mmexport1563102330123.jpg 变成 2019-07-14-1200.jpg 或你选的任何模板,还可以把它们和其他照片一起按年/月分进文件夹,或者按你的意思单独放。

离线运行,Windows、Linux 和 Mac,界面有简体中文。1000 张免费,无限制一次性 19.99 美元。

常见问题

有没有什么工具能从微信图片里恢复原始拍摄日期?

没有。元数据在文件到你手上之前就被去掉了,文件里没有可读的东西。声称能做到的工具,读的是文件名或文件时间,也就是保存时间。

文件名里的时间可靠吗?

那是图片被保存到这部手机的时间。当天拍当天发的照片,精确到天是对的。转发的照片,或者别人翻出来的老照片,是错的。

以「文件」方式发送能保留元数据吗?

能。微信只在按图片发送时压缩和去元数据。作为文件发送的 JPEG 原样到达。重要的照片请对方这样发。

我在猜日期,该不该设?

如果不设就是今天的日期,那就设。猜一个正确年份的日期,照片会排到它的邻居旁边。今天的日期会把它埋在所有东西下面。只知道月份就用一号。