1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #!/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)
|