Be more particular about the ordering of videos.

This just hardcodes the default Doom 2 ordering of videos; this will
likely need further expansion in the future.
This commit is contained in:
yrriban 2025-08-29 19:19:36 -04:00
parent 6815545da4
commit fb61d3d935

View file

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