changed end time to 17:30
--HG-- branch : aspn
This commit is contained in:
92
src/exif_redater.py
Normal file
92
src/exif_redater.py
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
__version__ = '$Id: exif_redater.py 469 2008-03-05 06:09:01Z mn $'
|
||||||
|
|
||||||
|
USAGE = "exif_redater.py\n\tredate .jpg/.jpeg files according to EXIF data"
|
||||||
|
|
||||||
|
"""
|
||||||
|
Iterates through a directory, reading the EXIF data from each jpg/jpeg file.
|
||||||
|
Parses the date/time from EXIF data and if it differs from file
|
||||||
|
modification date/time then changes file date/time
|
||||||
|
|
||||||
|
author: Michal Niklas
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import os.path
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
import EXIF
|
||||||
|
|
||||||
|
ALL_CNT = 0
|
||||||
|
CHANGED_CNT = 0
|
||||||
|
|
||||||
|
EXTENSIONS = ('.jpg', '.jpeg')
|
||||||
|
|
||||||
|
def show_fdt(fdt):
|
||||||
|
"""human readable format of file modification datetime"""
|
||||||
|
return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(fdt))
|
||||||
|
|
||||||
|
|
||||||
|
# 2005:10:20 23:22:28
|
||||||
|
def exif_info2time(ts):
|
||||||
|
"""changes EXIF date ('2005:10:20 23:22:28') to number of seconds since 1970-01-01"""
|
||||||
|
tpl = time.strptime(ts, '%Y:%m:%d %H:%M:%S')
|
||||||
|
return time.mktime(tpl)
|
||||||
|
|
||||||
|
|
||||||
|
def redate_by_exif(fn):
|
||||||
|
"""reads EXIF from jpg/jpeg and if file datetime differs from EXIF changes file date"""
|
||||||
|
global ALL_CNT, CHANGED_CNT
|
||||||
|
ALL_CNT += 1
|
||||||
|
exif_time = None
|
||||||
|
s = os.stat(fn)
|
||||||
|
f = open(fn, 'rb')
|
||||||
|
try:
|
||||||
|
tags = EXIF.process_file(f)
|
||||||
|
dt_value = "%s" % tags["Image DateTime"]
|
||||||
|
file_time = s[8]
|
||||||
|
exif_time = exif_info2time(dt_value)
|
||||||
|
finally:
|
||||||
|
f.close()
|
||||||
|
if exif_time:
|
||||||
|
secs_diff = file_time - exif_time
|
||||||
|
MAX_DIFF = 130.0
|
||||||
|
if secs_diff > MAX_DIFF or secs_diff < -MAX_DIFF:
|
||||||
|
print "%s %s -> %s" % (fn, show_fdt(file_time), show_fdt(exif_time))
|
||||||
|
os.utime(fn, (exif_time, exif_time))
|
||||||
|
CHANGED_CNT += 1
|
||||||
|
|
||||||
|
|
||||||
|
def process_dir(_, dir_name, files):
|
||||||
|
"""looks for .jpg/.jpeg file in dir"""
|
||||||
|
for fname in files:
|
||||||
|
can_change = False
|
||||||
|
fnl = fname.lower()
|
||||||
|
for ext in EXTENSIONS:
|
||||||
|
if fnl.endswith(ext):
|
||||||
|
can_change = True
|
||||||
|
break
|
||||||
|
if can_change:
|
||||||
|
fname = dir_name + '/' + fname
|
||||||
|
if os.path.isfile(fname):
|
||||||
|
try:
|
||||||
|
redate_by_exif(fname)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
os.path.walk('.', process_dir, None)
|
||||||
|
print '\nChecked: %d\nChanged %d\n' % (ALL_CNT, CHANGED_CNT)
|
||||||
|
|
||||||
|
|
||||||
|
if '--version' in sys.argv:
|
||||||
|
print __version__
|
||||||
|
else:
|
||||||
|
if __name__ == '__main__':
|
||||||
|
if '--help' in sys.argv:
|
||||||
|
print USAGE
|
||||||
|
else:
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user