QuickTime movie 1904 vs 1970 epoch

Started by wywh, January 19, 2024, 01:12:42 PM

Previous topic - Next topic

wywh

An academic question that puzzles me. I guess QuickTime epoch 1904 is used with '-api QuickTimeUTC=1', right?

I have heard that some old devices somehow save incorrect dates that are then incorrectly displayed 66 years before the correct date. Are there such sample movies or is it just a simple date issue? I did a quick test:

After 1970 it works as expected...

exiftool -overwrite_original -api LargeFileSupport=1 -api QuickTimeUTC=1 '-QuickTime:Time:All=1970:01:01 12:00:00' movie.mp4

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4
[QuickTime]     CreateDate                      : 1970:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1970:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1970:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1970:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1970:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1970:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1970:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1970:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1970:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1970:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1970:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 1970:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1970:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1970:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1970:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1970:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1970:01:01 12:00:00+02:00
[Keys]          Year                            : 1970:01:01 12:00:00

...and also at 1950 (although that Microsoft G0 group QuickTime:DateAcquired is read as year 2319):

exiftool -overwrite_original -api LargeFileSupport=1 -api QuickTimeUTC=1 '-QuickTime:Time:All=1950:01:01 12:00:00' movie.mp4

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4
[QuickTime]     CreateDate                      : 1950:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1950:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1950:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 2319:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1950:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1950:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1950:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          Year                            : 1950:01:01 12:00:00

...but if all dates are shifted by zero (as recommended for some related command and to fix (?) "Warning: [minor] Patched incorrect time zero for QuickTime date/time tag"), then almost all dates are moved forwards 66 years 1 day to year 2016 (1970-1904=66):

exiftool -overwrite_original -api LargeFileSupport=1 '-QuickTime:Time:All+=0:0:0 00:00:00' movie.mp4

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4                 
[QuickTime]     CreateDate                      : 2016:01:02 12:00:00+02:00
[QuickTime]     ModifyDate                      : 2016:01:02 12:00:00+02:00
[Track1]        TrackCreateDate                 : 2016:01:02 12:00:00+02:00
[Track1]        TrackModifyDate                 : 2016:01:02 12:00:00+02:00
[Track1]        MediaCreateDate                 : 2016:01:02 12:00:00+02:00
[Track1]        MediaModifyDate                 : 2016:01:02 12:00:00+02:00
[Track2]        TrackCreateDate                 : 2016:01:02 12:00:00+02:00
[Track2]        TrackModifyDate                 : 2016:01:02 12:00:00+02:00
[Track2]        MediaCreateDate                 : 2016:01:02 12:00:00+02:00
[Track2]        MediaModifyDate                 : 2016:01:02 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1950:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 2319:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1950:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1950:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1950:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          Year                            : 1950:01:01 12:00:00

BTW The earliest date 'QuickTime:CreateDate' supports in macOS 14.2.1 Sonoma Photos.app is 1904:01:01 00:00:00 UTC. On the other hand, 'Keys:CreationDate' supports dates as early as 0001:01:01 00:00:00. Photos.app can read that year 0001 but usually it is best to also use 'Keys:CreationDate' for dates before 1970 because apps like Google Photos might incorrectly sort movie dates earlier than 1902 even with 'Keys:CreationDate'.

- Matti

Hayo Baan

Haven't verified this, but could it be because you forgot to add -api QuickTimeUTC=1 to the timeshift command?
Hayo Baan – Photography
Web: www.hayobaan.nl

Hayo Baan

I just tried this and can confirm it is because you forgot -api QuickTimeUTC=1 in the timeshift command. With exiftool -overwrite_original -api LargeFileSupport=1 -api QuickTimeUTC=1 '-QuickTime:Time:All+=0:0:0 00:00:00' movie.mp4 it produces the expected results :)

(albeit with a bogus Microsoft DateAcquired)
Hayo Baan – Photography
Web: www.hayobaan.nl

Phil Harvey

Does this help explain things (from here)?:

           QuickTimeUTC
               Flag set to assume that QuickTime date/time values are stored
               as UTC, causing conversion to local time when they are
               extracted and from local time when written.  According to the
               QuickTime specification date/time values should be UTC, but
               many digital cameras store local time instead (presumably
               because they don't know the time zone), so the default is to
               not convert these times (except for Canon CR3 files, which
               always use UTC times).  This option also disables the
               autodetection of incorrect time-zero offsets in QuickTime
               date/time values, and enforces a time zero of 1904 as per the
               QuickTime specification.


- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

wywh

Quote from: Phil Harvey on January 21, 2024, 07:08:29 AMThis option [QuickTimeUTC] also disables the autodetection of incorrect time-zero offsets in QuickTime date/time values, and enforces a time zero of 1904 as per the QuickTime specification.

Thanks, that explains the different behavior when shifting pre- and post-1970 movie dates. With -api QuickTimeUTC=0, 66 years is added to pre-1970 movie dates. With -api QuickTimeUTC=1 both pre- and post-1970 movie dates are shifted in the same manner by the set amount:

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4
[QuickTime]     CreateDate                      : 1950:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1950:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1950:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 2319:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1950:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1950:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1950:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          Year                            : 1950:01:01 12:00:00

exiftool -m -overwrite_original -api LargeFileSupport=1 -api QuickTimeUTC=1 '-QuickTime:Time:All+=2:0:0 00:00:00' movie.mp4
Warning: Shift results in negative time when shifting TrackCreateDate - movie.mp4
    1 image files updated

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4
[QuickTime]     CreateDate                      : 1952:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1952:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1952:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1952:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1952:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1952:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1952:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 2321:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1952:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1950:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1952:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1952:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1952:01:01 12:00:00+02:00
[Keys]          Year                            : 1950:01:01 12:00:00

I often use -api QuickTimeUTC=1 as a placeholder when reading and writing movie and image dates (where it has no effect) so I don't forget it. But somehow I left it out for that date shift command presuming the dates were simply shifted.

Where does that "Warning: Shift results in negative time when shifting TrackCreateDate" come from?

- Matti

Phil Harvey

Hi Matti,

Quote from: wywh on January 21, 2024, 10:26:45 AMWhere does that "Warning: Shift results in negative time when shifting TrackCreateDate" come from?

If you upload the sample I can take a closer look and tell you what is happening.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

wywh

Quote from: Phil Harvey on January 21, 2024, 05:08:30 PMIf you upload the sample I can take a closer look and tell you what is happening

OK.
movie.mp4.zip

Phil Harvey

Right.  The ExifTool time shift feature converts the time to seconds since 1970 for the shift, and the dates are all in 1950 when you use QuickTimeUTC on this file, so all the times are negative.

Modern versions of the date/time libraries may support negative times, but the warning may still be valid because you shouldn't have date/times before 1970.  Maybe I should say "date before 1970" instead of "negative time" in the message?

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

wywh

Quote from: Phil Harvey on January 22, 2024, 09:00:56 AMMaybe I should say "date before 1970" instead of "negative time" in the message

Thanks, in v12.74 the warning message is not so confusing anymore.

Not a big deal but why only Track1 dates are shifted, and Track2 and Keys dates are left intact?

(I usually set all QuickTime dates the same because it helps spotting date errors).

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4
[QuickTime]     CreateDate                      : 1950:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1950:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1950:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 2319:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1950:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1950:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1950:01:01 12:00:00+02:00
[Keys]          CreationTime                    : 1950:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          Year                            : 1950:01:01 12:00:00

exiftool -m -overwrite_original -api LargeFileSupport=1 -api QuickTimeUTC=1 '-QuickTime:Time:All+=2:0:0 00:00:00' movie.mp4
Warning: Shift results in date before 1970 when shifting TrackCreateDate - movie.mp4
    1 image files updated

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4
[System]        FileModifyDate                  : 2024:01:29 10:30:35+02:00
[System]        FileAccessDate                  : 2024:01:29 10:30:35+02:00
[System]        FileInodeChangeDate             : 2024:01:29 10:30:35+02:00
[QuickTime]     CreateDate                      : 1952:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1952:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1952:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1952:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1952:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1952:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1952:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 2321:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1952:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1950:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1952:01:01 12:00:00+02:00
[Keys]          CreationTime                    : 1952:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1952:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1952:01:01 12:00:00+02:00
[Keys]          Year                            : 1950:01:01 12:00:00

- Matti

Phil Harvey

Yes.  This behaviour is the same as EXIF tags.  ExifTool writes to the first track by default unless you specify another track.  (The same way an EXIF IFD0 tag doesn't write to IFD1.)

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

wywh

Quote from: Phil Harvey on January 29, 2024, 08:10:27 AMExifTool writes to the first track by default unless you specify another track

Sorry for pestering but somehow that date shift command does work for post-1970 also for Track2:

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4
[QuickTime]     CreateDate                      : 1970:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1970:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1970:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1970:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1970:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1970:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1970:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1970:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1970:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1970:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1970:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 1970:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1970:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1970:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1970:01:01 12:00:00+02:00
[Keys]          CreationTime                    : 1970:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1970:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1970:01:01 12:00:00+02:00
[Keys]          Year                            : 1970:01:01 12:00:00

exiftool -m -overwrite_original -api LargeFileSupport=1 -api QuickTimeUTC=1 '-QuickTime:Time:All+=2:0:0 00:00:00' movie.mp4
    1 image files updated

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4
[QuickTime]     CreateDate                      : 1972:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1972:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1972:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1972:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1972:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1972:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1972:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1972:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1972:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1972:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1972:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 1972:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1972:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1970:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1972:01:01 12:00:00+02:00
[Keys]          CreationTime                    : 1972:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1972:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1972:01:01 12:00:00+02:00
[Keys]          Year                            : 1970:01:01 12:00:00

- Matti

Phil Harvey

You're not being a pest.  You're right.  Interesting.  I was wrong when I said only Track1 was written by default.

I should have looked paid more attention to this before.  The "before 1970" error is only thrown for values after Track1.

This will require more work to sort this out.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

Phil Harvey

#12
After some testing I have decided to remove the "before 1970" warning entirely, and just let the system handle negative dates.  That warning made sense for 32-bit systems, but 64-bit systems are common now, and 64-bit C libraries should be able to handle negative dates.  I tested this and it works with Windows 10 and the current version of Perl used in the Windows version of ExifTool.

This change means that time shifts should work the same with or without the QuickTimeUTC option.

Thanks for pushing on this because I think it will be a worthwhile change.

The reason that Track1 wasn't affected is because these dates are shifted manually instead of using the library functions.  (Read the TRICKY section here for the reason behind this difference.)

- Phil

P.S. So in fact, IFD0 is handled differently than Track1.  I checked the code to see why, and the default write group for these EXIF tags is IFD0, but for QuickTime there is effectively no default write group for Track tags, and they are written to all tracks.  I see why I did it this way because for TIFF files the IFD's are separate images, but for QuickTime files the tracks are just different components of the same movie.  (Forgive my bad memory, but I did add this feature more than 10 years ago.)
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

wywh

Quote from: Phil Harvey on January 30, 2024, 08:59:01 AMtime shifts should work the same with or without the QuickTimeUTC option

With QuickTimeUTC option v12.75 time shift works as expected. But without it, 66 years is added to pre-1970 QuickTime dates (why G0 QuickTime:CreationDate and QuickTime:DateTimeOriginal behave differently than QuickTime:CreateDate etc?).

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4
[QuickTime]     CreateDate                      : 1950:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1950:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1950:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 2319:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1950:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1950:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1950:01:01 12:00:00+02:00
[Keys]          CreationTime                    : 1950:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          Year                            : 1950:01:01 12:00:00

exiftool -overwrite_original -api LargeFileSupport=1 -api QuickTimeUTC=1 '-QuickTime:Time:All+=0:0:0 00:00:00' movie.mp4
    1 image files updated

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4                                     
[QuickTime]     CreateDate                      : 1950:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1950:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1950:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 2319:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1950:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1950:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1950:01:01 12:00:00+02:00
[Keys]          CreationTime                    : 1950:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          Year                            : 1950:01:01 12:00:00

exiftool -overwrite_original -api LargeFileSupport=1 '-QuickTime:Time:All+=0:0:0 00:00:00' movie.mp4
    1 image files updated

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4                 
[QuickTime]     CreateDate                      : 2016:01:02 12:00:00+02:00
[QuickTime]     ModifyDate                      : 2016:01:02 12:00:00+02:00
[Track1]        TrackCreateDate                 : 2016:01:02 12:00:00+02:00
[Track1]        TrackModifyDate                 : 2016:01:02 12:00:00+02:00
[Track1]        MediaCreateDate                 : 2016:01:02 12:00:00+02:00
[Track1]        MediaModifyDate                 : 2016:01:02 12:00:00+02:00
[Track2]        TrackCreateDate                 : 2016:01:02 12:00:00+02:00
[Track2]        TrackModifyDate                 : 2016:01:02 12:00:00+02:00
[Track2]        MediaCreateDate                 : 2016:01:02 12:00:00+02:00
[Track2]        MediaModifyDate                 : 2016:01:02 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1950:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 2319:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1950:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1950:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1950:01:01 12:00:00+02:00
[Keys]          CreationTime                    : 1950:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          Year                            : 1950:01:01 12:00:00

Without QuickTimeUTC option time shift works as expected only when the initial year is post-1970:

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4
[QuickTime]     CreateDate                      : 1970:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1970:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1970:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1970:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1970:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1970:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1970:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1970:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1970:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1970:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1970:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 1970:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1970:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1970:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1970:01:01 12:00:00+02:00
[Keys]          CreationTime                    : 1970:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1970:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1970:01:01 12:00:00+02:00
[Keys]          Year                            : 1970:01:01 12:00:00

exiftool -overwrite_original -api LargeFileSupport=1 '-QuickTime:Time:All-=20:0:0 00:00:00' movie.mp4                       
    1 image files updated

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4                   
[QuickTime]     CreateDate                      : 1950:01:01 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1950:01:01 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1950:01:01 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1950:01:01 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1950:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 2319:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1950:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1970:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1950:01:01 12:00:00+02:00
[Keys]          CreationTime                    : 1950:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1950:01:01 12:00:00+02:00
[Keys]          Year                            : 1970:01:01 12:00:00

exiftool -overwrite_original -api LargeFileSupport=1 '-QuickTime:Time:All-=20:0:0 00:00:00' movie.mp4
    1 image files updated

exiftool -a -G1 -s -api LargeFileSupport=1 -api QuickTimeUTC=1 -Time:All movie.mp4                   
[QuickTime]     CreateDate                      : 1996:01:02 12:00:00+02:00
[QuickTime]     ModifyDate                      : 1996:01:02 12:00:00+02:00
[Track1]        TrackCreateDate                 : 1996:01:02 12:00:00+02:00
[Track1]        TrackModifyDate                 : 1996:01:02 12:00:00+02:00
[Track1]        MediaCreateDate                 : 1996:01:02 12:00:00+02:00
[Track1]        MediaModifyDate                 : 1996:01:02 12:00:00+02:00
[Track2]        TrackCreateDate                 : 1996:01:02 12:00:00+02:00
[Track2]        TrackModifyDate                 : 1996:01:02 12:00:00+02:00
[Track2]        MediaCreateDate                 : 1996:01:02 12:00:00+02:00
[Track2]        MediaModifyDate                 : 1996:01:02 12:00:00+02:00
[Microsoft]     EncodingTime                    : 1930:01:01 12:00:00+02:00
[Microsoft]     DateAcquired                    : 2299:01:01 12:00:00
[UserData]      DateTimeOriginal                : 1930:01:01 12:00:00+02:00
[ItemList]      ReleaseDate                     : 1970:01:01 12:00:00
[ItemList]      ContentCreateDate               : 1930:01:01 12:00:00+02:00
[Keys]          CreationTime                    : 1930:01:01 12:00:00+02:00
[Keys]          CreationDate                    : 1930:01:01 12:00:00+02:00
[Keys]          LocationDate                    : 1930:01:01 12:00:00+02:00
[Keys]          Year                            : 1970:01:01 12:00:00

- Matti

Phil Harvey

Hi Matti,

Again, I shouldn't speak without testing things myself.  You are correct, the pre-1970 dates get "fixed" to the proper epoch when shifting them without the QuickTimeUTC option.

The difference with different date/time tags is due to the different way they are stored.  Only dates which are (properly) stored as seconds since January 1904 are affected.  The other ones are probably stored as strings.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).