【问题标题】:Apple Live Photos MetadataApple Live Photos 元数据
【发布时间】:2016-04-28 02:17:48
【问题描述】:

当我从 Mac 上的照片应用程序导出实时照片时,它会创建两个单独的文件:一个 jpg 和一个 mov。 jpg 带有所有的 exif 数据,而 mov 文件似乎总是延迟五个小时。

更具体地说,我使用了 exiftool -option 文件名。这些是 jpg 的结果(所有的 yyyy-mm-dd 都是一样的,所以我只包括时间输出)。

DateTimeOriginal 10:24:38
GPSDateTime 15:24:38Z
MediaCreateDate none
FileModifyDate 15:47:46-05:00
ModifyDate 10:24:38

这些是 mov 的结果。

DateTimeOriginal none
GPSDateTime none
MediaCreateDate 15:24:38
FileModifyDate 15:47:29-05:00
ModifyDate 15:24:40

它应该显示的时间是 jpg 的 DateTimeOriginal。由于可能与时区相关的故障,该 mov 的 MediaCreateDate 似乎延迟了五个小时。

无论如何,我问这个问题的原因是我想从使用 Apple 照片转换为 Dropbox 中的普通文件夹树。问题是有一个好的命名方案来保持排序。我用谷歌搜索了一下,使用 Hazel(加上下面的脚本)工作得很好,如果它不是用于实时照片的 mov 文件的话。使用合适的命名方案对我所有的照片(和实时照片)进行排序。

如何调整下面的脚本以获得 mov 文件的正确名称?

或者,也可以

如何使用 Hazel 告诉每个 mov 文件具有相同名称的 jpg 的 DateTimeOriginal?

最后一点我的意思是有一个脚本,如果输入一个 mov 文件,它会查找同名的 jpg 并使用它的 DateTimeOriginal。

顺便说一句,这里的第二个答案 (Apple Live Photo file format) 似乎解释了照片如何跟踪 mov 文件的元数据,但我不知道如何使用它。

我实际上找到了两个脚本。第一个在这里(https://www.macstories.net/reviews/better-dropbox-camera-uploads-with-camerasync/)。

<?php
date_default_timezone_set("Europe/Rome");
$date = exif_read_data($argv[1],"EXIF");
$date = $date["DateTimeOriginal"];
$time = date_parse_from_format("Y:m:d H:i:s",$date);
$time = mktime($time["hour"],$time["minute"],$time["second"],$time["month"],$time["day"],$time["year"]);
touch($argv[1],$time,$time);
?>

第二个(https://www.noodlesoft.com/forums/viewtopic.php?f=4&t=2218)是

exiftool -P -d '%Y.%m.%d at %H.%M.%S' \
   '-filename<${FileModifyDate;}.%e' \
    '-filename<${GPSDateTime;}.%e' \
    '-filename<${MediaCreateDate;}.%e' \
    '-filename<${ModifyDate;}.%e' \
    '-filename<${DateTimeOriginal;}.%e' \
    "$1"

我之前在 apple.stackexchange 上问过这个问题,但没有引起注意。 https://apple.stackexchange.com/questions/236377/live-photos-metadata

【问题讨论】:

    标签: bash macos metadata exif apple-live-photos


    【解决方案1】:

    同时考虑这个老问题:

    将实时照片作为单独的 JPG 和 MOV 文件处理时,元数据将允许您链接文件。 MOV 文件有一个名为 ContentIdentifier 的 EXIF 标签,看起来与 JPG 文件的 MakerNotes EXIF 标签中的标签 Apple_0x0011 相同。

    使用 exiftool:

    $ exiftool -u -s IMG_8403.JPG | grep Apple_0x0011 Apple_0x0011 : C09DCB26-D321-4254-9F68-2E2E7FA16155 $ exiftool -ContentIdentifier IMG_8403.MOV Content Identifier : C09DCB26-D321-4254-9F68-2E2E7FA16155

    【讨论】:

      【解决方案2】:

      这是一个策略:从所有 .mov 文件的修改时间中减去 5 小时,然后照常进行:

      cd folder-with-your-stuff
      find * -name "*.mov" |
        while read filepath; do
          olddate=$(date -R -r "$filepath")
          touch -d "$olddate - 5 hours" "$filepath"
        done
      

      参考:https://askubuntu.com/questions/62492/how-can-i-change-the-date-modified-created-of-a-file

      【讨论】:

      • 谢谢!不过,我担心的是,如果我去不同的时区拍照,所有的 mov 文件现在都会关闭不同的小时数......更好的策略可能是拥有一个脚本获取一个 mov 文件,查找具有相同名称的 jpg 并使用 exiftool 来获取正确的日期。但我不知道怎么写。
      • 对不起,我想我误读了你的问题。似乎您正在使用文件内部的 exif 数据,而我的回答仅影响文件系统修改日期。你能告诉我stat a.jpgstat a.mov 对mov-jpg 的结果吗?另外,每个 mov 和对应的 jpg 是否在同一个文件夹中,或者至少在系统附近的文件夹中?
      • 我在统计输出中寻找什么?我看到一堆日期,但没有一个是正确的(即甚至没有一个显示 10:24:38)。 Apple Photos 存储文件的方式一团糟。我总是可以手动导出,这样所有的 jpg 和 mov 都成对出现(相同的名称,不同的扩展名)都在同一个文件夹中。最后一个解决方案并不理想,但可能更容易编写脚本?
      【解决方案3】:

      在这一点上已经很老了,但我想我会权衡一下。

      GPSDateTime 始终位于UTC 时区(因此Z 附加到日期)。因此,MediaCreateDate 似乎被设置为UTC 时间,并且该区域被剥离。

      【讨论】:

        猜你喜欢
        • 2012-01-01
        • 2012-05-12
        • 2023-03-23
        • 2020-06-26
        • 2020-08-29
        • 2016-04-08
        • 1970-01-01
        • 2013-12-25
        • 1970-01-01
        相关资源
        最近更新 更多