Fix sorting: parse full timestamp from filename for videos
This commit is contained in:
parent
b89934d570
commit
7d1e052326
1 changed files with 21 additions and 0 deletions
21
movmaker.py
21
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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue