MCPcopy
hub / github.com/mli/autocut / run

Method run

autocut/cut.py:78–167  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

76 self.args = args
77
78 def run(self):
79 fns = {"srt": None, "media": None, "md": None}
80 for fn in self.args.inputs:
81 ext = os.path.splitext(fn)[1][1:]
82 fns[ext if ext in fns else "media"] = fn
83
84 assert fns["media"], "must provide a media filename"
85 assert fns["srt"], "must provide a srt filename"
86
87 is_video_file = utils.is_video(fns["media"].lower())
88 outext = "mp4" if is_video_file else "mp3"
89 output_fn = utils.change_ext(utils.add_cut(fns["media"]), outext)
90 if utils.check_exists(output_fn, self.args.force):
91 return
92
93 with open(fns["srt"], encoding=self.args.encoding) as f:
94 subs = list(srt.parse(f.read()))
95
96 if fns["md"]:
97 md = utils.MD(fns["md"], self.args.encoding)
98 if not md.done_editing():
99 return
100 index = []
101 for mark, sent in md.tasks():
102 if not mark:
103 continue
104 m = re.match(r"\[(\d+)", sent.strip())
105 if m:
106 index.append(int(m.groups()[0]))
107 subs = [s for s in subs if s.index in index]
108 logging.info(f'Cut {fns["media"]} based on {fns["srt"]} and {fns["md"]}')
109 else:
110 logging.info(f'Cut {fns["media"]} based on {fns["srt"]}')
111
112 segments = []
113 # Avoid disordered subtitles
114 subs.sort(key=lambda x: x.start)
115 for x in subs:
116 if len(segments) == 0:
117 segments.append(
118 {"start": x.start.total_seconds(), "end": x.end.total_seconds()}
119 )
120 else:
121 if x.start.total_seconds() - segments[-1]["end"] < 0.5:
122 segments[-1]["end"] = x.end.total_seconds()
123 else:
124 segments.append(
125 {"start": x.start.total_seconds(), "end": x.end.total_seconds()}
126 )
127
128 if is_video_file:
129 media = editor.VideoFileClip(fns["media"])
130 else:
131 media = editor.AudioFileClip(fns["media"])
132
133 # Add a fade between two clips. Not quite necessary. keep code here for reference
134 # fade = 0
135 # segments = _expand_segments(segments, fade, 0, video.duration)

Callers 2

test_srt_cutMethod · 0.95
test_md_cutMethod · 0.95

Calls 2

done_editingMethod · 0.95
tasksMethod · 0.95

Tested by 2

test_srt_cutMethod · 0.76
test_md_cutMethod · 0.76