[Solved] Memories : weird behavior with video time metadata

Hello,

I recently started using Memories to manage all my personal pictures and videos, and I think it is awesome (thanks to the devs).
I am having a weird behavior regarding video time metadata.
On my instance, I have some pictures and videos taken with a bunch of Android devices, a Nikon camera and a GoPro.
The time metadata for pictures are all correctly set and Memories correctly displays all of them in the Timeline.
But for videos, some of them are time “shifted”. I managed to identify those as the videos taken with the GoPro. For the explanation, lets say I toke the same picture and the same video with all of my devices at the same time (2024-07-30 10:00:00). The table below will help understand the problem.

Timestamp Nikon Pictures Nikon Videos
Exif time 2024-07-30 10:00:00 2024-07-30 10:00:00
Memories time 2024-07-30 10:00:00 2024-07-30 10:00:00
Timestamp Android Pictures Android Videos
Exif time 2024-07-30 10:00:00 2024-07-30 07:00:00
Memories time 2024-07-30 10:00:00 2024-07-30 10:00:00
Timestamp GoPro Pictures GoPro Videos
Exif time 2024-07-30 10:00:00 2024-07-30 10:00:00
Memories time 2024-07-30 10:00:00 2024-07-30 13:00:00

For the Nikon, pictures and videos (mov format) have the correct timestamp in Exif and in Memories.
For Android, pictures have the correct timestamp in Exif and Memories, but for videos (mp4 format) there is a wrong timestamp in Exif (3h before the video was actually taken), but somehow Memories figures this out and has the correct timestamp.
For GoPro, pictures have the correct timestamp in Exif and Memories, but for videos (mp4 format) there is a correct timestamp in Exif (the correct moment when the video was taken), but Memories applies the same “thing” as it does for Android videos, and adds 3h to the correct Exif timestamp, which “shifts” it in a wrong place in the Timeline.

My supposition is that for mp4 format, the time in metadata is “guessed” by Memories to be in UTC (as I live in UTC+3, it explains the 3h added both for Android and GoPro videos), but for pictures and mov videos, the time is considered to be in my time zone.
For me here, the GoPro is doing the right thing (putting the correct timestamp in the videos), but the fact that somehow the Android timestamp is “corrected” by Memories to reflect the real moment the videos were taken, makes me wonder if the GoPro is not following some specifications regarding this…

I have some questions :

  1. Why is the timestamp in Android videos in UTC? Why isn’t the same approach used as for pictures when the timestamp is in my time zone?
  2. How does Memories know that it should correct the timestamp in Android videos but not in Nikon ones?
  3. What would be the best approach to solve this?
    Keeping all the GoPro (correct) timestamps, correct all the ones from Android devices and find a way to configure Memories, not to consider the time zone of mp4 videos to be UTC?
    Doing the opposite, changing all the timestamps for GoPro videos to be in UTC, so Memories “corrects” it by applying my time zone so that the Timeline looks accurate?

The second approach (changing GoPro video timestamps) looks better (from a maintenance point of view, as I will have less “work” to do after holidays, compared to changing all the timestamps on Android videos), but looks wrong (as the time is not on the same timezone as all the pictures and the Nikon mov videos).

Did someone have the same problem and how did you solve it?

After posting my first message, I stumbled upon this : https://community.adobe.com/t5/lightroom-classic-bugs/p-video-capture-time-shifted-by-time-zone-offset/idi-p/12249887#comments
It seems there are no real specifications for video exif metadata, but the consensus is to use UTC in video timestamps.
So in this matter, the Android devices seem to respect this consensus, but not the GoPro and the Nikon.

Now the question is :
How come Memories doesn’t apply the timezone correction to the timestamps found in the Nikon videos?
How does it know that for the Nikon, the timestamps in the video are the ones from my timezone, so no correction is needed?

So it seems for the Nikon videos, there are 2 “CreateDate” metadata exposed by exiftool (QuickTime:CreateDate and Nikon:CreateDate) :

$ exiftool -AllDates -api QuickTimeUTC=1 -api LargeFileSupport=1 -n -json -G1 nikon.mov 
[{
  "SourceFile": "nikon.mov",
  "Nikon:DateTimeOriginal": "2024:07:05 13:18:54",
  "QuickTime:CreateDate": "2024:07:05 16:18:54+03:00",
  "Nikon:CreateDate": "2024:07:05 13:18:54",
  "QuickTime:ModifyDate": "2024:07:05 16:18:54+03:00"
}]

$ exiftool -AllDates -api QuickTimeUTC=1 -api LargeFileSupport=1 -n -json nikon.mov 
[{
  "SourceFile": "nikon.mov",
  "DateTimeOriginal": "2024:07:05 13:18:54",
  "CreateDate": "2024:07:05 13:18:54",
  "ModifyDate": "2024:07:05 16:18:54+03:00"
}]

And it seems that by default (without the -G1 parameter), exiftool exposed the “Nikon:CreateDate” which isn’t offset. So I suppose that Memories understands it as being in its timezone and correctly displays it in the timeline.