Fix for QuickTime date/time, issue #282
This commit is contained in:
11
README.md
11
README.md
@@ -277,7 +277,7 @@ Options:
|
|||||||
--jpeg-quality FLOAT RANGE Value in range 0.0 to 1.0 to use with
|
--jpeg-quality FLOAT RANGE Value in range 0.0 to 1.0 to use with
|
||||||
--convert-to-jpeg. A value of 1.0 specifies
|
--convert-to-jpeg. A value of 1.0 specifies
|
||||||
best quality, a value of 0.0 specifies
|
best quality, a value of 0.0 specifies
|
||||||
maximum compression. Defaults to 1.0.
|
maximum compression. Defaults to 1.0
|
||||||
--download-missing Attempt to download missing photos from
|
--download-missing Attempt to download missing photos from
|
||||||
iCloud. The current implementation uses
|
iCloud. The current implementation uses
|
||||||
Applescript to interact with Photos to
|
Applescript to interact with Photos to
|
||||||
@@ -328,9 +328,9 @@ Options:
|
|||||||
EXIF:OffsetTimeOriginal; EXIF:ModifyDate
|
EXIF:OffsetTimeOriginal; EXIF:ModifyDate
|
||||||
(see --ignore-date-modified);
|
(see --ignore-date-modified);
|
||||||
IPTC:DateCreated; IPTC:TimeCreated; (video
|
IPTC:DateCreated; IPTC:TimeCreated; (video
|
||||||
files only): QuickTime:CreationDate (UTC);
|
files only): QuickTime:CreationDate;
|
||||||
QuickTime:ModifyDate (UTC) (see also
|
QuickTime:CreateDate; QuickTime:ModifyDate
|
||||||
--ignore-date-modified);
|
(see also --ignore-date-modified);
|
||||||
QuickTime:GPSCoordinates;
|
QuickTime:GPSCoordinates;
|
||||||
UserData:GPSCoordinates.
|
UserData:GPSCoordinates.
|
||||||
--ignore-date-modified If used with --exiftool or --sidecar, will
|
--ignore-date-modified If used with --exiftool or --sidecar, will
|
||||||
@@ -398,7 +398,8 @@ Options:
|
|||||||
work with iTerm2 (use with Terminal.app).
|
work with iTerm2 (use with Terminal.app).
|
||||||
This is faster and more reliable than the
|
This is faster and more reliable than the
|
||||||
default AppleScript interface.
|
default AppleScript interface.
|
||||||
--report REPORTNAME.CSV Write a CSV formatted report of all files
|
--report <path to export report>
|
||||||
|
Write a CSV formatted report of all files
|
||||||
that were exported.
|
that were exported.
|
||||||
--cleanup Cleanup export directory by deleting any
|
--cleanup Cleanup export directory by deleting any
|
||||||
files which were not included in this export
|
files which were not included in this export
|
||||||
|
|||||||
@@ -1337,7 +1337,7 @@ def query(
|
|||||||
"XMP:PersonInImage; EXIF:GPSLatitudeRef; EXIF:GPSLongitudeRef; EXIF:GPSLatitude; EXIF:GPSLongitude; "
|
"XMP:PersonInImage; EXIF:GPSLatitudeRef; EXIF:GPSLongitudeRef; EXIF:GPSLatitude; EXIF:GPSLongitude; "
|
||||||
"EXIF:GPSPosition; EXIF:DateTimeOriginal; EXIF:OffsetTimeOriginal; "
|
"EXIF:GPSPosition; EXIF:DateTimeOriginal; EXIF:OffsetTimeOriginal; "
|
||||||
"EXIF:ModifyDate (see --ignore-date-modified); IPTC:DateCreated; IPTC:TimeCreated; "
|
"EXIF:ModifyDate (see --ignore-date-modified); IPTC:DateCreated; IPTC:TimeCreated; "
|
||||||
"(video files only): QuickTime:CreationDate (UTC); QuickTime:ModifyDate (UTC) (see also --ignore-date-modified); "
|
"(video files only): QuickTime:CreationDate; QuickTime:CreateDate; QuickTime:ModifyDate (see also --ignore-date-modified); "
|
||||||
"QuickTime:GPSCoordinates; UserData:GPSCoordinates.",
|
"QuickTime:GPSCoordinates; UserData:GPSCoordinates.",
|
||||||
)
|
)
|
||||||
@click.option(
|
@click.option(
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
""" version info """
|
""" version info """
|
||||||
|
|
||||||
__version__ = "0.38.2"
|
__version__ = "0.38.3"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1197,7 +1197,8 @@ def _exiftool_dict(
|
|||||||
EXIF:ModifyDate
|
EXIF:ModifyDate
|
||||||
IPTC:DateCreated
|
IPTC:DateCreated
|
||||||
IPTC:TimeCreated
|
IPTC:TimeCreated
|
||||||
QuickTime:CreationDate (UTC)
|
QuickTime:CreationDate
|
||||||
|
QuickTime:CreateDate (UTC)
|
||||||
QuickTime:ModifyDate (UTC)
|
QuickTime:ModifyDate (UTC)
|
||||||
QuickTime:GPSCoordinates
|
QuickTime:GPSCoordinates
|
||||||
UserData:GPSCoordinates
|
UserData:GPSCoordinates
|
||||||
@@ -1300,22 +1301,26 @@ def _exiftool_dict(
|
|||||||
# [IPTC] Digital Creation Date : 2020:10:30
|
# [IPTC] Digital Creation Date : 2020:10:30
|
||||||
# [IPTC] Date Created : 2020:10:30
|
# [IPTC] Date Created : 2020:10:30
|
||||||
#
|
#
|
||||||
|
# for videos:
|
||||||
|
# [QuickTime] CreateDate : 2020:12:11 06:10:10
|
||||||
|
# [QuickTime] ModifyDate : 2020:12:11 06:10:10
|
||||||
|
# [Keys] CreationDate : 2020:12:10 22:10:10-08:00
|
||||||
# This code deviates from Photos in one regard:
|
# This code deviates from Photos in one regard:
|
||||||
# if photo has modification date, use it otherwise use creation date
|
# if photo has modification date, use it otherwise use creation date
|
||||||
|
|
||||||
if self.isphoto:
|
date = self.date
|
||||||
date = self.date
|
offsettime = date.strftime("%z")
|
||||||
# exiftool expects format to "2015:01:18 12:00:00"
|
# find timezone offset in format "-04:00"
|
||||||
datetimeoriginal = date.strftime("%Y:%m:%d %H:%M:%S")
|
offset = re.findall(r"([+-]?)([\d]{2})([\d]{2})", offsettime)
|
||||||
|
offset = offset[0] # findall returns list of tuples
|
||||||
|
offsettime = f"{offset[0]}{offset[1]}:{offset[2]}"
|
||||||
|
|
||||||
|
# exiftool expects format to "2015:01:18 12:00:00"
|
||||||
|
datetimeoriginal = date.strftime("%Y:%m:%d %H:%M:%S")
|
||||||
|
|
||||||
|
if self.isphoto:
|
||||||
exif["EXIF:DateTimeOriginal"] = datetimeoriginal
|
exif["EXIF:DateTimeOriginal"] = datetimeoriginal
|
||||||
exif["EXIF:CreateDate"] = datetimeoriginal
|
exif["EXIF:CreateDate"] = datetimeoriginal
|
||||||
|
|
||||||
offsettime = date.strftime("%z")
|
|
||||||
# find timezone offset in format "-04:00"
|
|
||||||
offset = re.findall(r"([+-]?)([\d]{2})([\d]{2})", offsettime)
|
|
||||||
offset = offset[0] # findall returns list of tuples
|
|
||||||
offsettime = f"{offset[0]}{offset[1]}:{offset[2]}"
|
|
||||||
exif["EXIF:OffsetTimeOriginal"] = offsettime
|
exif["EXIF:OffsetTimeOriginal"] = offsettime
|
||||||
|
|
||||||
dateoriginal = date.strftime("%Y:%m:%d")
|
dateoriginal = date.strftime("%Y:%m:%d")
|
||||||
@@ -1330,10 +1335,14 @@ def _exiftool_dict(
|
|||||||
exif["EXIF:ModifyDate"] = self.date.strftime("%Y:%m:%d %H:%M:%S")
|
exif["EXIF:ModifyDate"] = self.date.strftime("%Y:%m:%d %H:%M:%S")
|
||||||
elif self.ismovie:
|
elif self.ismovie:
|
||||||
# QuickTime spec specifies times in UTC
|
# QuickTime spec specifies times in UTC
|
||||||
|
# QuickTime:CreateDate and ModifyDate are in UTC w/ no timezone
|
||||||
|
# QuickTime:CreationDate must include time offset or Photos shows invalid values
|
||||||
# reference: https://exiftool.org/TagNames/QuickTime.html#Keys
|
# reference: https://exiftool.org/TagNames/QuickTime.html#Keys
|
||||||
date_utc = datetime_tz_to_utc(self.date)
|
# https://exiftool.org/forum/index.php?topic=11927.msg64369#msg64369
|
||||||
|
exif["QuickTime:CreationDate"] = f"{datetimeoriginal}{offsettime}"
|
||||||
|
|
||||||
|
date_utc = datetime_tz_to_utc(date)
|
||||||
creationdate = date_utc.strftime("%Y:%m:%d %H:%M:%S")
|
creationdate = date_utc.strftime("%Y:%m:%d %H:%M:%S")
|
||||||
exif["QuickTime:CreationDate"] = creationdate
|
|
||||||
exif["QuickTime:CreateDate"] = creationdate
|
exif["QuickTime:CreateDate"] = creationdate
|
||||||
if self.date_modified is not None and not ignore_date_modified:
|
if self.date_modified is not None and not ignore_date_modified:
|
||||||
exif["QuickTime:ModifyDate"] = datetime_tz_to_utc(
|
exif["QuickTime:ModifyDate"] = datetime_tz_to_utc(
|
||||||
@@ -1381,7 +1390,8 @@ def _exiftool_json_sidecar(
|
|||||||
EXIF:ModifyDate
|
EXIF:ModifyDate
|
||||||
IPTC:DigitalCreationDate
|
IPTC:DigitalCreationDate
|
||||||
IPTC:DateCreated
|
IPTC:DateCreated
|
||||||
QuickTime:CreationDate (UTC)
|
QuickTime:CreationDate
|
||||||
|
QuickTime:CreateDate (UTC)
|
||||||
QuickTime:ModifyDate (UTC)
|
QuickTime:ModifyDate (UTC)
|
||||||
QuickTime:GPSCoordinates
|
QuickTime:GPSCoordinates
|
||||||
UserData:GPSCoordinates
|
UserData:GPSCoordinates
|
||||||
|
|||||||
@@ -344,7 +344,7 @@ CLI_EXIFTOOL_QUICKTIME = {
|
|||||||
"XMP:TagsList": "Travel",
|
"XMP:TagsList": "Travel",
|
||||||
"XMP:Subject": "Travel",
|
"XMP:Subject": "Travel",
|
||||||
"QuickTime:GPSCoordinates": "34.053345 -118.242349",
|
"QuickTime:GPSCoordinates": "34.053345 -118.242349",
|
||||||
"QuickTime:CreationDate": "2020:01:05 22:13:13",
|
"QuickTime:CreationDate": "2020:01:05 14:13:13-08:00",
|
||||||
"QuickTime:CreateDate": "2020:01:05 22:13:13",
|
"QuickTime:CreateDate": "2020:01:05 22:13:13",
|
||||||
"QuickTime:ModifyDate": "2020:01:05 22:13:13",
|
"QuickTime:ModifyDate": "2020:01:05 22:13:13",
|
||||||
},
|
},
|
||||||
@@ -355,7 +355,7 @@ CLI_EXIFTOOL_QUICKTIME = {
|
|||||||
"XMP:TagsList": "Travel",
|
"XMP:TagsList": "Travel",
|
||||||
"XMP:Subject": "Travel",
|
"XMP:Subject": "Travel",
|
||||||
"QuickTime:GPSCoordinates": "34.053345 -118.242349",
|
"QuickTime:GPSCoordinates": "34.053345 -118.242349",
|
||||||
"QuickTime:CreationDate": "2020:12:05 05:21:52",
|
"QuickTime:CreationDate": "2020:12:04 21:21:52-08:00",
|
||||||
"QuickTime:CreateDate": "2020:12:05 05:21:52",
|
"QuickTime:CreateDate": "2020:12:05 05:21:52",
|
||||||
"QuickTime:ModifyDate": "2020:12:05 05:21:52",
|
"QuickTime:ModifyDate": "2020:12:05 05:21:52",
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user