Inital Commit
This commit is contained in:
44
modules/utils.py
Normal file
44
modules/utils.py
Normal file
@ -0,0 +1,44 @@
|
||||
# modules/utils.py
|
||||
#
|
||||
# General-purpose utility functions used throughout the rendering pipeline.
|
||||
|
||||
import re
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
from modules.config import NAS_MOUNT_ROOT, resolve_path # type: ignore
|
||||
|
||||
# Regex pattern to match date formats like '2025.06.20', '2025.06.20.2', etc.
|
||||
DATE_PATTERN = re.compile(r"^(\d{4})\.(\d{2})\.(\d{2})(?:\.(\d{1,2}))?$")
|
||||
|
||||
|
||||
def scan_for_new_clips(base_path: Path, subfolder: str) -> list[Path]:
|
||||
"""
|
||||
Recursively scan base_path for any files under a named subfolder
|
||||
(e.g. 'montages', 'hits', etc).
|
||||
Returns a list of all video files found.
|
||||
"""
|
||||
matching_clips = []
|
||||
|
||||
for session_dir in base_path.iterdir():
|
||||
if session_dir.is_dir() and session_dir.name.count(".") >= 2:
|
||||
target_dir = session_dir / subfolder
|
||||
if target_dir.exists():
|
||||
for f in target_dir.glob("*.mp4"):
|
||||
matching_clips.append(f)
|
||||
|
||||
return matching_clips
|
||||
|
||||
def run_ffmpeg(cmd: list[str]) -> None:
|
||||
"""
|
||||
Execute an ffmpeg command, logging output and raising if the command fails.
|
||||
"""
|
||||
import subprocess
|
||||
from textwrap import indent
|
||||
|
||||
print(f"\n🛠️ Running ffmpeg:\n{indent(' '.join(cmd), ' ')}\n")
|
||||
|
||||
try:
|
||||
subprocess.run(cmd, check=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"❌ FFmpeg failed with error: {e}")
|
||||
raise
|
||||
Reference in New Issue
Block a user