123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #!/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 describeExif(exif):
- for k in timeCodes:
- if k in exif.keys():
- print('Exif[', k, ']=', exif[k], '->', x.TAGS['Exif'][k]['name'])
- else:
- print('Exif[', k, ']=', '?', '->', x.TAGS['Exif'][k]['name'])
- def shiftDateTime(exifDict):
- e = exifDict['Exif']
- t = dateTimeOf(e)
- print('Shifting')
- print(t)
- targetDateTime = t + shift
- print('to')
- print(targetDateTime)
- for k in dateTimeCodes:
- e[k] = targetDateTime.strftime(formatDate).encode()
- return exifDict
- for filename in filenames:
- print(filename)
- exifDict = x.load(filename)
- describeExif(exifDict['Exif'])
- exifDict = shiftDateTime(exifDict)
- describeExif(exifDict['Exif'])
- exifBytes = x.dump(exifDict)
- x.insert(exifBytes, filename)
- print()
|