diff --git a/movmaker.py b/movmaker.py index 3f07fde..152365b 100755 --- a/movmaker.py +++ b/movmaker.py @@ -498,10 +498,31 @@ def media_embedded_date(path: Path) -> datetime | None: return ffprobe_creation_date(path) +def parse_date_from_filename(path: Path) -> datetime | None: + # Look for 8 digits (YYYYMMDD) followed by optional separator and 6 digits (HHMMSS) + m = re.search(r'(\d{8})[_-]?(\d{6})?', path.stem) + if m: + try: + date_part = m.group(1) + time_part = m.group(2) if m.group(2) else '000000' + full_ts = date_part + time_part + return datetime.strptime(full_ts, '%Y%m%d%H%M%S') + except ValueError: + return None + return None + def media_date(path: Path) -> datetime: + # 1. Try embedded metadata dt = media_embedded_date(path) + + # 2. Try filename parsing for videos + if dt is None and path.suffix.lower() in VIDEO_EXTS: + dt = parse_date_from_filename(path) + + # 3. Fallback to mtime if dt is None: dt = datetime.fromtimestamp(path.stat().st_mtime) + if dt.tzinfo is not None: dt = dt.astimezone().replace(tzinfo=None) return dt