def test_scene_list(test_video_file): """ Test SceneManager get_scene_list method with VideoManager/ContentDetector. """ vm = VideoManager([test_video_file]) sm = SceneManager() sm.add_detector(ContentDetector()) try: base_timecode = vm.get_base_timecode() video_fps = vm.get_framerate() start_time = FrameTimecode('00:00:00', video_fps) end_time = FrameTimecode('00:00:10', video_fps) vm.set_duration(start_time=start_time, end_time=end_time) vm.set_downscale_factor() vm.start() num_frames = sm.detect_scenes(frame_source=vm) assert num_frames == end_time.get_frames() + 1 scene_list = sm.get_scene_list(base_timecode) for i, _ in enumerate(scene_list): if i > 0: # Ensure frame list is sorted (i.e. end time frame of # one scene is equal to the start time of the next). assert scene_list[i-1][1] == scene_list[i][0] finally: vm.release()
def test_scene_list(test_video_file): """ Test SceneManager get_scene_list method with VideoManager/ContentDetector. """ vm = VideoManager([test_video_file]) sm = SceneManager() sm.add_detector(ContentDetector()) try: base_timecode = vm.get_base_timecode() video_fps = vm.get_framerate() start_time = FrameTimecode('00:00:00', video_fps) end_time = FrameTimecode('00:00:10', video_fps) vm.set_duration(start_time=start_time, end_time=end_time) vm.set_downscale_factor() vm.start() num_frames = sm.detect_scenes(frame_source=vm) assert num_frames == end_time.get_frames() + 1 scene_list = sm.get_scene_list(base_timecode) for i, _ in enumerate(scene_list): if i > 0: # Ensure frame list is sorted (i.e. end time frame of # one scene is equal to the start time of the next). assert scene_list[i - 1][1] == scene_list[i][0] finally: vm.release()
def find_trim_times(source, subtitles, min_start_time, max_end_time): video_manager = VideoManager([source]) scene_manager = SceneManager() scene_manager.add_detector(ContentDetector()) base_timecode = video_manager.get_base_timecode() try: # Set downscale factor to improve processing speed (no args means default). video_manager.set_downscale_factor() x = FrameTimecode(timecode=str(min_start_time), fps=video_manager.get_framerate()) y = FrameTimecode(timecode=str(max_end_time), fps=video_manager.get_framerate()) video_manager.set_duration(start_time=x, end_time=y) video_manager.start() scene_manager.detect_scenes(frame_source=video_manager) scene_list = scene_manager.get_scene_list(base_timecode) subs_start = FrameTimecode(timecode=str(subtitles.subs[0].start), fps=video_manager.get_framerate()) subs_end = FrameTimecode(timecode=str(subtitles.subs[-1].end), fps=video_manager.get_framerate()) trim_start = x trim_end = y for scene in enumerate(scene_list): timecodes = scene[1] start_frame = timecodes[0].get_frames() end_frame = timecodes[1].get_frames() if subs_start.get_frames() >= start_frame > trim_start.get_frames( ): trim_start = timecodes[0] if trim_end.get_frames() > end_frame >= subs_end.get_frames(): trim_end = timecodes[1] trim_end = FrameTimecode(timecode=trim_end.get_frames() - 1, fps=video_manager.get_framerate()) finally: video_manager.release() return [trim_start, trim_end]
def test_scene_list(test_video_file): """ Test SceneManager get_scene_list method with VideoManager/ContentDetector. """ vm = VideoManager([test_video_file]) sm = SceneManager() sm.add_detector(ContentDetector()) try: video_fps = vm.get_framerate() start_time = FrameTimecode('00:00:05', video_fps) end_time = FrameTimecode('00:00:15', video_fps) assert end_time.get_frames() > start_time.get_frames() vm.set_duration(start_time=start_time, end_time=end_time) vm.set_downscale_factor() vm.start() num_frames = sm.detect_scenes(frame_source=vm) assert num_frames == (1 + end_time.get_frames() - start_time.get_frames()) scene_list = sm.get_scene_list() assert scene_list # Each scene is in the format (Start Timecode, End Timecode) assert len(scene_list[0]) == 2 for i, _ in enumerate(scene_list): assert scene_list[i][0].get_frames() < scene_list[i][1].get_frames( ) if i > 0: # Ensure frame list is sorted (i.e. end time frame of # one scene is equal to the start time of the next). assert scene_list[i - 1][1] == scene_list[i][0] finally: vm.release()
def test_content_detect_opencv_videocap(test_video_file): """ Test SceneManager with cv2.VideoCapture and ContentDetector. """ cap = cv2.VideoCapture(test_video_file) sm = SceneManager() sm.add_detector(ContentDetector()) try: video_fps = cap.get(cv2.CAP_PROP_FPS) duration = FrameTimecode('00:00:05', video_fps) num_frames = sm.detect_scenes(frame_source=cap, end_time=duration) assert num_frames == duration.get_frames() finally: cap.release()
def test_content_detect(test_video_file): """ Test SceneManager with VideoManager and ContentDetector. """ vm = VideoManager([test_video_file]) sm = SceneManager() sm.add_detector(ContentDetector()) try: video_fps = vm.get_framerate() start_time = FrameTimecode('00:00:00', video_fps) end_time = FrameTimecode('00:00:05', video_fps) vm.set_duration(start_time=start_time, end_time=end_time) vm.set_downscale_factor() vm.start() num_frames = sm.detect_scenes(frame_source=vm) assert num_frames == end_time.get_frames() + 1 finally: vm.release()
#Set begining of reading #cap.set(cv2.CAP_PROP_POS_MSEC,1000) # Read SRT srtOriginal = pysrt.open(srtPath+inputName+'.srt', encoding='utf-8')#, encoding='iso-8859-1' ### Iterate over the SRT sentence = 0 for line in srtOriginal[:10]: #SubRipItem .strftime((“%H:%M:%S.ff”) #“%H:%M:%S[.nnn]”) #print(line.start.to_time(),line.end.to_time()) ini = FrameTimecode(timecode = line.start.to_time().strftime("%H:%M:%S.%f"), fps = fps) iniFrame = ini.get_frames() end = FrameTimecode(timecode = line.end.to_time().strftime("%H:%M:%S.%f"), fps = fps) endFrame = end.get_frames() ''' positionStart = line.start.hours*60*60 + line.start.minutes*60 + line.start.seconds + line.start.frame*0.000001 positionStart = positionStart*fps positionEnd = line.end.hours*60*60 + line.end.minutes*60 + line.end.seconds + line.end.frame*0.000001 positionEnd = positionEnd*fps print(iniFrame, endFrame, positionStart,positionEnd) ''' print(line.start.to_time().strftime("%H:%M:%S.%f"), iniFrame, endFrame) outSegment = cv2.VideoWriter(outputVideoPath+inputName+'/'+str(sentence)+'_'+line.text+'.avi', fcc, fpsOutput, (videoWidth, videoHeight)) # Doc: CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds or video capture timestamp. # cap.set(cv2.CAP_PROP_POS_MSEC,line.start.to_time())