Support excluding the overlay from concatenated videos.
This commit is contained in:
parent
b62e9ebbf9
commit
8c1d031def
1 changed files with 32 additions and 26 deletions
|
@ -13,6 +13,7 @@ class Concat(dcc.doom_base.Wad):
|
||||||
parser = super().get_parser(prog_name)
|
parser = super().get_parser(prog_name)
|
||||||
parser.add_argument("start_map")
|
parser.add_argument("start_map")
|
||||||
parser.add_argument("end_map")
|
parser.add_argument("end_map")
|
||||||
|
parser.add_argument("-n", "--nooverlay", action="store_true")
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
|
@ -38,6 +39,7 @@ class Concat(dcc.doom_base.Wad):
|
||||||
sink = ograph.add("buffersink")
|
sink = ograph.add("buffersink")
|
||||||
asink = ograph.add("abuffersink")
|
asink = ograph.add("abuffersink")
|
||||||
|
|
||||||
|
if not parsed_args.nooverlay:
|
||||||
img = wand.image.Image(height=chunk.streams[0].height,width=chunk.streams[0].width)
|
img = wand.image.Image(height=chunk.streams[0].height,width=chunk.streams[0].width)
|
||||||
mapstring = v.name[-6:-4]
|
mapstring = v.name[-6:-4]
|
||||||
text = self._config["map_names"][f"map{mapstring}"]
|
text = self._config["map_names"][f"map{mapstring}"]
|
||||||
|
@ -72,17 +74,20 @@ class Concat(dcc.doom_base.Wad):
|
||||||
output.streams[1].bit_rate=chunk.streams[1].bit_rate
|
output.streams[1].bit_rate=chunk.streams[1].bit_rate
|
||||||
src = ograph.add_buffer(template=chunk.streams[0], time_base=chunk.streams[0].time_base)
|
src = ograph.add_buffer(template=chunk.streams[0], time_base=chunk.streams[0].time_base)
|
||||||
asrc = ograph.add_abuffer(template=chunk.streams[1], time_base=chunk.streams[1].time_base)
|
asrc = ograph.add_abuffer(template=chunk.streams[1], time_base=chunk.streams[1].time_base)
|
||||||
|
ifade = ograph.add("fade", args="in:0:60")
|
||||||
|
iafade = ograph.add("afade", args="in:{}:48000".format(offset*48000/1000000))
|
||||||
|
ofade = ograph.add("fade", args="out:{}:60".format((chunk.duration*60/1000000)-60))
|
||||||
|
oafade = ograph.add("afade", args="out:{}:48000".format(((offset+chunk.duration)*48000/1000000)-48000))
|
||||||
|
if not parsed_args.nooverlay:
|
||||||
overlay = ograph.add_buffer(width=img.width, height=img.height, format="rgba", time_base=chunk.streams[0].time_base)
|
overlay = ograph.add_buffer(width=img.width, height=img.height, format="rgba", time_base=chunk.streams[0].time_base)
|
||||||
overlay_fo = ograph.add("fade", args="out:240:60")
|
overlay_fo = ograph.add("fade", args="out:240:60")
|
||||||
overlay.link_to(overlay_fo, 0, 0)
|
overlay.link_to(overlay_fo, 0, 0)
|
||||||
composite = ograph.add("overlay", args="x=4:y=4")
|
composite = ograph.add("overlay", args="x=4:y=4")
|
||||||
src.link_to(composite, 0, 0)
|
src.link_to(composite, 0, 0)
|
||||||
overlay_fo.link_to(composite, 0, 1)
|
overlay_fo.link_to(composite, 0, 1)
|
||||||
ifade = ograph.add("fade", args="in:0:60")
|
|
||||||
iafade = ograph.add("afade", args="in:{}:48000".format(offset*48000/1000000))
|
|
||||||
ofade = ograph.add("fade", args="out:{}:60".format((chunk.duration*60/1000000)-60))
|
|
||||||
oafade = ograph.add("afade", args="out:{}:48000".format(((offset+chunk.duration)*48000/1000000)-48000))
|
|
||||||
composite.link_to(ifade, 0, 0)
|
composite.link_to(ifade, 0, 0)
|
||||||
|
else:
|
||||||
|
src.link_to(ifade, 0, 0)
|
||||||
asrc.link_to(iafade, 0, 0)
|
asrc.link_to(iafade, 0, 0)
|
||||||
ifade.link_to(ofade, 0, 0)
|
ifade.link_to(ofade, 0, 0)
|
||||||
iafade.link_to(oafade, 0, 0)
|
iafade.link_to(oafade, 0, 0)
|
||||||
|
@ -97,6 +102,7 @@ class Concat(dcc.doom_base.Wad):
|
||||||
packet.pts += (offset * packet.time_base.denominator) / (packet.time_base.numerator * 1000000)
|
packet.pts += (offset * packet.time_base.denominator) / (packet.time_base.numerator * 1000000)
|
||||||
if packet.stream_index == 0: # TODO: robustness
|
if packet.stream_index == 0: # TODO: robustness
|
||||||
for ifr in packet.decode():
|
for ifr in packet.decode():
|
||||||
|
if not parsed_args.nooverlay:
|
||||||
text_frame = av.video.frame.VideoFrame(img.width, img.height, format="rgba")
|
text_frame = av.video.frame.VideoFrame(img.width, img.height, format="rgba")
|
||||||
text_frame.planes[0].update(img.make_blob(format="rgba"))
|
text_frame.planes[0].update(img.make_blob(format="rgba"))
|
||||||
text_frame.pts = ifr.pts
|
text_frame.pts = ifr.pts
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue