diff --git a/dcc/concat.py b/dcc/concat.py index 6493037..b0af14f 100644 --- a/dcc/concat.py +++ b/dcc/concat.py @@ -1,6 +1,7 @@ import av import copy import dcc.doom_base +import enum import fractions import io import logging @@ -9,6 +10,11 @@ import numpy as np import wand.image +class State(enum.Enum): + NOT_STARTED = 1 + STARTED = 2 + DONE = 3 + class Concat(dcc.doom_base.Wad): def get_parser(self, prog_name): parser = super().get_parser(prog_name) @@ -21,10 +27,7 @@ class Concat(dcc.doom_base.Wad): logging.basicConfig() av.logging.set_level(av.logging.VERBOSE) av.logging.restore_default_callback() - videos = ( - self.fabricate.joinpath(parsed_args.wad) - .glob(f"{parsed_args.wad}_map*.mp4") - ) + videodir = self.fabricate.joinpath(parsed_args.wad) fn_base = ( f"{parsed_args.wad}_maps{parsed_args.start_map}" + f"to{parsed_args.end_map}" @@ -45,19 +48,27 @@ class Concat(dcc.doom_base.Wad): # unavailable" error when switching to inputs after the first. # Presumably fixable, but it's easier to just make one graph per video # and mux everything together at the end. - for v in sorted(videos): - # TODO: Support UDoom in literally any way. - if not ( - v.name >= f"{parsed_args.wad}_map{parsed_args.start_map}.mp4" - and v.name <= f"{parsed_args.wad}_map{parsed_args.end_map}.mp4" - ): + # TODO: Support UDoom in literally any way. + d2maps = [str(x).zfill(2) for x in range(1,16)] + ["31","32"] + [str(x) for x in range(16,31)] + state = State.NOT_STARTED + for idx in d2maps: + if idx == parsed_args.start_map: + state = State.STARTED + if idx == parsed_args.end_map: + state = State.DONE + if state == State.NOT_STARTED: continue start_time = self._offset / 1000000 - text = self._add_chunk(v, output, not parsed_args.nooverlay) + text = self._add_chunk( + videodir.joinpath(f"{parsed_args.wad}_map{idx}.mp4"), + output, not parsed_args.nooverlay + ) list.append( summary, f"{text} {math.floor(start_time / 60):02}:" + f"{math.floor(start_time % 60):02}" ) + if state == State.DONE: + break output.close() for line in summary: