Unverified Commit c3f2185a authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

add exif-adjust-timestamp helper

parent 961759d4
Loading
Loading
Loading
Loading
+70 −0
Original line number Diff line number Diff line
#!/usr/bin/env python3
# vim:tabstop=4 softtabstop=4 shiftwidth=4 textwidth=160 smarttab expandtab colorcolumn=160
#
# Copyright (C) 2025 Birte Kristina Friesel
#
# SPDX-License-Identifier: BSD-2-Clause

from datetime import datetime, timedelta
import argparse
import json
import subprocess
import sys

if __name__ == "__main__":

    parser = argparse.ArgumentParser(
        formatter_class=argparse.RawDescriptionHelpFormatter, description=__doc__
    )

    parser.add_argument("delta", type=int, help="Time delta [minutes]")
    parser.add_argument("images", type=str, nargs="+")

    args = parser.parse_args()
    delta = timedelta(minutes=args.delta)

    for filename in args.images:
        data = dict()
        try:
            exiftool = subprocess.run(
                [
                    "exiftool",
                    "-json",
                    "-d",
                    "%s",
                    "-escapeHTML",
                    "-groupNames",
                    filename,
                ],
                stdout=subprocess.PIPE,
                text=True,
            )
            if exiftool.returncode == 0:
                data = json.loads(exiftool.stdout)[0]
        except FileNotFoundError:
            pass

        old_timestamp = datetime.fromtimestamp(int(data["EXIF:DateTimeOriginal"]))
        new_timestamp = old_timestamp + delta

        print(f"{filename} : {old_timestamp}{new_timestamp}")
        exiftool_cmd = [
            "exiftool",
            "-P",
            "-EXIF:DateTimeOriginal=" + str(new_timestamp),
            filename,
        ]

        try:
            subprocess.run(
                exiftool_cmd,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
            )
        except subprocess.CalledProcessError as e:
            print(
                f"Cannot to write exif tags for {filename}: {exiftool_cmd} returned {e.returncode}"
            )
            print(f"exiftool stdout:\n{e.stdout}\n")
            print(f"exiftool stderr:\n{e.stdout}\n")