def create_video_queue_segment(project: Project, split_locations: List[int]) -> List[Chunk]: """ Create a list of chunks using segmented files :param project: Project :param split_locations: a list of frames to split on :return: A list of chunks """ # segment into separate files segment(project.input, project.temp, split_locations) # get the names of all the split files source_path = project.temp / 'split' queue_files = [x for x in source_path.iterdir() if x.suffix == '.mkv'] queue_files.sort(key=lambda p: p.stem) if len(queue_files) == 0: er = 'Error: No files found in temp/split, probably splitting not working' print(er) log(er) terminate() chunk_queue = [ create_chunk_from_segment(project, index, file) for index, file in enumerate(queue_files) ] return chunk_queue
def create_video_queue_hybrid(project: Project, split_locations: List[int]) -> List[Chunk]: """ Create list of chunks using hybrid segment-select approach :param project: the Project :param split_locations: a list of frames to split on :return: A list of chunks """ keyframes = get_keyframes(project.input) end = [project.get_frames()] splits = [0] + split_locations + end segments_list = list(zip(splits, splits[1:])) to_split = [x for x in keyframes if x in splits] segments = [] # Make segments segment(project.input, project.temp, to_split[1:]) source_path = project.temp / 'split' queue_files = [x for x in source_path.iterdir() if x.suffix == '.mkv'] queue_files.sort(key=lambda p: p.stem) kf_list = list(zip(to_split, to_split[1:] + end)) for f, (x, y) in zip(queue_files, kf_list): to_add = [(f, [s[0] - x, s[1] - x]) for s in segments_list if s[0] >= x and s[1] <= y and s[0] - x < s[1] - x] segments.extend(to_add) chunk_queue = [ create_select_chunk(project, index, file, *cb) for index, (file, cb) in enumerate(segments) ] return chunk_queue