From 26d31300e66dda2db6dcd90b84be268dc5e77aef Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Mon, 18 May 2026 09:58:10 -0600 Subject: [PATCH] Add metadata for creation time to recording segments and exports (#23239) --- frigate/record/export.py | 24 ++++++++++++++++++++++-- frigate/record/maintainer.py | 2 ++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/frigate/record/export.py b/frigate/record/export.py index d4b49bb4b..3c4f3ba4a 100644 --- a/frigate/record/export.py +++ b/frigate/record/export.py @@ -235,7 +235,17 @@ class RecordingExporter(threading.Thread): # add metadata title = f"Frigate Recording for {self.camera}, {self.get_datetime_from_timestamp(self.start_time)} - {self.get_datetime_from_timestamp(self.end_time)}" - ffmpeg_cmd.extend(["-metadata", f"title={title}"]) + creation_time = datetime.datetime.fromtimestamp( + self.start_time, tz=datetime.timezone.utc + ).strftime("%Y-%m-%dT%H:%M:%S.%fZ") + ffmpeg_cmd.extend( + [ + "-metadata", + f"title={title}", + "-metadata", + f"creation_time={creation_time}", + ] + ) ffmpeg_cmd.append(video_path) @@ -326,7 +336,17 @@ class RecordingExporter(threading.Thread): # add metadata title = f"Frigate Preview for {self.camera}, {self.get_datetime_from_timestamp(self.start_time)} - {self.get_datetime_from_timestamp(self.end_time)}" - ffmpeg_cmd.extend(["-metadata", f"title={title}"]) + creation_time = datetime.datetime.fromtimestamp( + self.start_time, tz=datetime.timezone.utc + ).strftime("%Y-%m-%dT%H:%M:%S.%fZ") + ffmpeg_cmd.extend( + [ + "-metadata", + f"title={title}", + "-metadata", + f"creation_time={creation_time}", + ] + ) return ffmpeg_cmd, playlist_lines diff --git a/frigate/record/maintainer.py b/frigate/record/maintainer.py index a90d1edc1..e36df78d0 100644 --- a/frigate/record/maintainer.py +++ b/frigate/record/maintainer.py @@ -547,6 +547,8 @@ class RecordingMaintainer(threading.Thread): "copy", "-movflags", "+faststart", + "-metadata", + f"creation_time={start_time.strftime('%Y-%m-%dT%H:%M:%S.%fZ')}", file_path, stderr=asyncio.subprocess.PIPE, stdout=asyncio.subprocess.DEVNULL,