defget_exif_datetime(file: Path): suffix = file.suffix.lower() tag = ""
if suffix in image_exts: tag = "-DateTimeOriginal" elif suffix in video_exts: tag = "-MediaCreateDate" else: returnNone
cmd = ["exiftool"] if suffix in video_exts: cmd += ["-api", "QuickTimeUTC=1"] cmd += [tag, "-d", "%Y-%m-%d %H:%M:%S", str(file)]
result = subprocess.run(cmd, capture_output=True, text=True) for line in result.stdout.splitlines(): if": "in line: try: dt = datetime.strptime(line.split(": ", 1)[1], "%Y-%m-%d %H:%M:%S") if suffix in image_exts: return dt.replace(tzinfo=DEFAULT_IMAGE_TZ) else: return dt.replace(tzinfo=timezone.utc) except: returnNone returnNone
file_time_pairs = [] for file in tqdm(list(src_dir.iterdir()), desc="提取拍摄时间"): if file.is_file(): dt = get_exif_datetime(file) if dt: file_time_pairs.append((dt, file)) else: print(f"⚠️ 无法获取拍摄时间: {file.name}")