Compare commits

...

3 Commits

Author SHA1 Message Date
Alexandru Pisarenco 288d00d649 Make MenuItem duration detection safer
5 years ago
Alexandru Pisarenco 9bc3be780c Fix add/skip messages
5 years ago
Alexandru Pisarenco 5997823397 Fix directory creation (hierarchical)
5 years ago

@ -32,6 +32,7 @@ for dir, dirs, files in os.walk(str(Config.BASE_PATH)):
print(relative_path / file, end=" ") print(relative_path / file, end=" ")
item = QueueItem(Path(dir) / file, Config.DESTINATION_PATH / relative_path) item = QueueItem(Path(dir) / file, Config.DESTINATION_PATH / relative_path)
if not Config.OVERWRITE and item.task.destination.exists(): if not Config.OVERWRITE and item.task.destination.exists():
print(" ... skip existing")
continue continue
info = item.task.mediainfo info = item.task.mediainfo
if info.codec == 'HEVC': if info.codec == 'HEVC':
@ -40,8 +41,8 @@ for dir, dirs, files in os.walk(str(Config.BASE_PATH)):
if info.bitrate < Config.LOW_BITRATE_THRESHOLD: if info.bitrate < Config.LOW_BITRATE_THRESHOLD:
print("") print("")
continue continue
item.task.destination.parent.mkdir(exist_ok=True) item.task.destination.parent.mkdir(exist_ok=True, parents=True)
print(" ... added") print(" ... ADDED")
jobs.append(item) jobs.append(item)
with open(Config.QUEUE_FILE, "w") as fp: with open(Config.QUEUE_FILE, "w") as fp:

@ -63,17 +63,31 @@ class AudioInfo:
class MenuItem: class MenuItem:
TIME_RE = re.compile(r"(\d{2})[^\d]+(\d{2})[^\d]+(\d{2})(?:[^\d]+(\d+))")
def __init__(self, *, start: str, duration: str, name: str): def __init__(self, *, start: str, duration: str, name: str):
self.start = start self.start = start
self.duration = duration self.duration = duration
self.name = name self.name = name
@property
def str_start(self) -> timedelta:
match = self.TIME_RE.search(self.start)
hours, minutes, seconds, millis = tuple(map(int, (match.group(i + 1) for i in range(4))))
return timedelta(hours=hours, minutes=minutes, seconds=seconds, milliseconds=millis)
def __str__(self) -> str:
return f"'{self.name}' at {self.str_start}, duration {self.duration}"
def __repr__(self) -> str:
return f"<MenuItem '{self.name}' at {self.start}, duration {self.duration}>"
class MenuInfo: class MenuInfo:
REGEX = re.compile(r"^_\d{2}_\d{2}_\d{2}") REGEX = re.compile(r"^_\d{2}_\d{2}_\d{2}")
def __init__(self, menu_dict: Dict[str, str]): def __init__(self, menu_dict: Dict[str, str], duration: str = None):
self.data = menu_dict self.data = menu_dict
self.duration: Optional[float] = timeparse(duration) if duration else None
@property @property
def items(self) -> List[MenuItem]: def items(self) -> List[MenuItem]:
@ -100,7 +114,7 @@ class MenuInfo:
result[-1].duration = duration result[-1].duration = duration
result.append(MenuItem(start=key, duration="", name=name)) result.append(MenuItem(start=key, duration="", name=name))
if result: if result:
td = timedelta(seconds=float(self.data["Duration"])) td = timedelta(seconds=float(self.data.get("Duration", self.duration)))
dur_td = timedelta(seconds=round((td - td0).total_seconds())) dur_td = timedelta(seconds=round((td - td0).total_seconds()))
duration = str(dur_td) duration = str(dur_td)
duration = f"{duration:0>8}" duration = f"{duration:0>8}"
@ -227,4 +241,4 @@ class MediaInfo:
@property @property
def menu(self) -> MenuInfo: def menu(self) -> MenuInfo:
return MenuInfo(self.menu_data or { self.duration: "Chapter 1" }) return MenuInfo(self.menu_data or { self.duration: "Chapter 1" }, duration=self.duration)

Loading…
Cancel
Save