#!/usr/bin/python3 import sys import piexif as x import datetime as dt shift = dt.timedelta(hours = 1, minutes = 6) print('Shift exif date time by', shift) if len(sys.argv) <= 1: print(sys.argv[0], 'img1.jpg img2.jpg') quit() def codesOfLabelsContaining(value: str): codes = [] for (k, v) in x.TAGS['Exif'].items(): if value in v['name']: codes.append(k) return codes timeCodes = codesOfLabelsContaining('Time') dateTimeCodes = codesOfLabelsContaining('DateTime') filenames = sys.argv[1:] formatDate = '%Y:%m:%d %H:%M:%S' formatFrom = f"b'{formatDate}'" def dateTimeOf(exif): for k in dateTimeCodes: if k in exif.keys(): return dt.datetime.strptime(str(exif[k]), formatFrom) return dt.datetime.now() def shiftDateTime(exifDict): e = exifDict['Exif'] t = dateTimeOf(e) targetDateTime = t + shift for k in dateTimeCodes: e[k] = targetDateTime.strftime(formatDate).encode() return exifDict for filename in filenames: print(filename) exifDict = x.load(filename) exifDict = shiftDateTime(exifDict) exifBytes = x.dump(exifDict) x.insert(exifBytes, filename)