海外に行っていたのだが、カメラのタイムゾーンを設定し忘れていたので、撮った写真のExifがすべて日本時間で記録されていた。ということで、ExifToolを使って、時差を補正した。
撮影日時(DateTimeOriginal)と作成日時(CreateDate)、修正日時(ModifyDate)、それからタイムゾーンがなんか3つある(OffsetTime, OffsetTimeOriginal, OffsetTimeDigitized)ので、全部変えた。
日本時間(+09:00)から、+02:00のタイムゾーンへの変換を行っている。
import os
import subprocess
import re
import datetime
EXIFTOOL_PATH = r"D:\Tools\exiftool\exiftool.exe"
def get_exif(filepath):
""" ExifToolでEXIFを表示し、それを辞書として取得する"""
cmd = f'{EXIFTOOL_PATH} "{filepath}"'
result = subprocess.run(cmd, shell=True, check=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
edic = dict()
for line in result.stdout.splitlines():
sp = line.split(":", maxsplit=1)
key = re.sub(r"\s+$", "", sp[0])
val = re.sub(r"^\s+", "", sp[1])
edic[key] = val
return edic
def modify_exif_time_zone(filepath, overwrite=0):
""" EXIF情報を +09:00 -> +02:00に書き換える
overwrite=1にすると、元ファイルを上書きする """
edic = get_exif(filepath)
old_time_zone = 9
new_time_zone = 2
old_time_zone_str = f"+{old_time_zone:02d}:00"
new_time_zone_str = f"+{new_time_zone:02d}:00"
if edic["Offset Time"] == old_time_zone_str:
# 撮影日時を取得して、時間をずらす
dt = datetime.datetime.strptime(edic["Date/Time Original"].split("+")[0], '%Y:%m:%d %H:%M:%S')
offset_hours = old_time_zone - new_time_zone
dt2 = dt - datetime.timedelta(hours=offset_hours)
dt2_str = dt2.strftime('%Y:%m:%d %H:%M:%S')
# 日時とタイムゾーンを書き換えるコマンド文
cmd = f'{EXIFTOOL_PATH} -DateTimeOriginal="{dt2_str}" -CreateDate="{dt2_str}" -ModifyDate="{dt2_str}"'
cmd += f' -OffsetTime="{new_time_zone_str}" -OffsetTimeOriginal="{new_time_zone_str}" -OffsetTimeDigitized="{new_time_zone_str}"'
cmd += f' "{filepath}"'
if overwrite:
cmd += " -overwrite_original"
# ExifToolを実行
result = subprocess.run(cmd, shell=True, check=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
# print(result)
return
#### ここからメイン
from glob import glob
from tqdm import tqdm
# 同フォルダにある*.JPGが対象
files = glob("*.JPG")
for filepath in tqdm(files):
modify_exif_time_zone(filepath)
今回はJPEGを対象としているが、ExifToolは一応RAWファイルのExifも書き換えられる。・・・が、HDR撮影したRAFファイル(FUJIFILMのRAW)は、ExifToolが対応していないのか、エラーが出て書き換えられなかった。
また、そうでないRAFファイルはExifを書き換えることはできるが、純正現像ソフトでは現像できなくなった。非純正現像ソフトでは現像できた。