diff --git a/README.md b/README.md index d9db369..be6173d 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,9 @@ This script: with a plain stream copy) and concatenates everything into one file. 5. Carries over the original container metadata (GPS, device info, creation time, Live Photo identifiers) from one of the source clips. +6. Sets the output file's filesystem modification time to match that same + capture time — some tools (e.g. Synology Photos, for videos) sort/date + by file mtime instead of parsing embedded metadata. Audio stays uncompressed PCM throughout, so it never loses quality. Video quality defaults to a bitrate slightly above the source clips' own bitrate diff --git a/concat_live_clips.py b/concat_live_clips.py index 1cc481b..92374a4 100755 --- a/concat_live_clips.py +++ b/concat_live_clips.py @@ -28,6 +28,7 @@ Requirements: detects clip overlap): pip install --user numpy """ import argparse +import os import re import subprocess import sys @@ -365,6 +366,17 @@ def main(): print(f"Encoding seamless, deduplicated output -> {output}", file=sys.stderr) subprocess.run(cmd, check=True) + + creation_dt = fetch_creation_time(clips[args.metadata_from]) + if creation_dt is not None: + ts = creation_dt.timestamp() + os.utime(output, (ts, ts)) + print(f"Set file mtime to {creation_dt.isoformat()} (matches embedded metadata, " + f"so apps that key off filesystem time instead of parsing video metadata " + f"still sort/date it correctly)", file=sys.stderr) + else: + print("warning: couldn't determine source creation time; leaving file mtime as-is", file=sys.stderr) + print(f"Done: {output}", file=sys.stderr)