exif_shift.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/python3
  2. import sys
  3. import piexif as x
  4. import datetime as dt
  5. shift = dt.timedelta(hours = 1)
  6. print('Shift exif date time by', shift)
  7. if len(sys.argv) < 1:
  8. print('shift img1.jpg img2.jpg')
  9. quit()
  10. timeTagCodes = [36867, 36868]
  11. filenames = sys.argv[1:]
  12. formatDate = '%Y:%m:%d %H:%M:%S'
  13. formatFrom = f"b'{formatDate}'"
  14. def describeExif(exif):
  15. for k in timeTagCodes:
  16. if k in exif.keys():
  17. t = dt.datetime.strptime(str(exif[k]), formatFrom)
  18. print('Exif[', k, ']=', t, '->', x.TAGS['Exif'][k]['name'])
  19. else:
  20. print('Exif[', k, ']=', '?', '->', x.TAGS['Exif'][k]['name'])
  21. return t
  22. def shiftThisFile(filename: str):
  23. m = x.load(filename)
  24. e = m['Exif']
  25. t = describeExif(e)
  26. targetDateTime = t + shift
  27. print('Shifting')
  28. print(t)
  29. print('to')
  30. print(targetDateTime)
  31. for k in timeTagCodes:
  32. e[k] = targetDateTime.strftime(formatDate).encode()
  33. describeExif(e)
  34. return m
  35. for filename in filenames:
  36. print(filename)
  37. exifDict = shiftThisFile(filename)
  38. exifBytes = x.dump(exifDict)
  39. x.insert(exifBytes, filename)
  40. print()