def get_shots(video_path, downscale_factor=None, threshold=30): """ Parameters ---------- video_path : scenedetect VideoManager object. downscale_factor : Factor by which to downscale video to improve speed. threshold : Cut detection threshold. Returns ------- cut_tuples : A list of tuples where each tuple contains the in- and out-frame of each shot. """ #print('Detecting cuts...') video = VideoManager([video_path]) video.set_downscale_factor(downscale_factor) scene_manager = SceneManager() scene_manager.add_detector(ContentDetector(threshold=threshold)) video.start() scene_manager.detect_scenes(frame_source=video) shot_list = scene_manager.get_scene_list() cut_tuples = [] for shot in shot_list: cut_tuples.append((shot[0].get_frames(), shot[1].get_frames())) video.release() return cut_tuples
def calculate_scene_list(video: Message, threshold: int = 30) -> List[Tuple[FrameTimecode, FrameTimecode]]: video_manager = VideoManager([video.message_data.file_path]) stats_manager = StatsManager() scene_manager = SceneManager(stats_manager) scene_manager.add_detector(ContentDetector(threshold=threshold)) try: video_manager.start() base_timecode = video_manager.get_base_timecode() scene_manager.detect_scenes(frame_source=video_manager) scene_list = scene_manager.get_scene_list(base_timecode) return scene_list finally: video_manager.release()
def find_scene(video, results): video_manager = VideoManager([video]) scene_manager = SceneManager() scene_manager.add_detector(ContentDetector(threshold=THRESHOLD)) base_timecode = video_manager.get_base_timecode() video_manager.set_downscale_factor() video_manager.start() scene_manager.detect_scenes(frame_source=video_manager) scene_list = scene_manager.get_scene_list(base_timecode) # Each scene is a tuple of (start, end) FrameTimecodes. for i, scene in enumerate(scene_list): #scene[0].get_timecode(), scene[0].get_frames(), #scene[1].get_timecode(), scene[1].get_frames(),)) results.append((scene[0].get_timecode())) video_manager.release()
def test_api(test_video_file): # (str) -> None """ Test overall PySceneDetect API functionality. Can be considered a high level integration/black-box test. """ print("Running PySceneDetect API test...") print("PySceneDetect version being used: %s" % str(scenedetect.__version__)) # Create a video_manager point to video file testvideo.mp4. Note that multiple # videos can be appended by simply specifying more file paths in the list # passed to the VideoManager constructor. Note that appending multiple videos # requires that they all have the same frame size, and optionally, framerate. video_manager = VideoManager([test_video_file]) stats_manager = StatsManager() scene_manager = SceneManager(stats_manager) # Add ContentDetector algorithm (constructor takes detector options like threshold). scene_manager.add_detector(ContentDetector()) base_timecode = video_manager.get_base_timecode() try: # If stats file exists, load it. if os.path.exists(STATS_FILE_PATH): # Read stats from CSV file opened in read mode: with open(STATS_FILE_PATH, 'r') as stats_file: stats_manager.load_from_csv(stats_file) start_time = base_timecode + 20 # 00:00:00.667 end_time = base_timecode + 20.0 # 00:00:20.000 # Set video_manager duration to read frames from 00:00:00 to 00:00:20. video_manager.set_duration(start_time=start_time, end_time=end_time) # Set downscale factor to improve processing speed. video_manager.set_downscale_factor() # Start video_manager. video_manager.start() # Perform scene detection on video_manager. scene_manager.detect_scenes(frame_source=video_manager) # Obtain list of detected scenes. scene_list = scene_manager.get_scene_list() # Like FrameTimecodes, each scene in the scene_list can be sorted if the # list of scenes becomes unsorted. print('List of scenes obtained:') for i, scene in enumerate(scene_list): print(' Scene %2d: Start %s / Frame %d, End %s / Frame %d' % ( i + 1, scene[0].get_timecode(), scene[0].get_frames(), scene[1].get_timecode(), scene[1].get_frames(), )) # We only write to the stats file if a save is required: if stats_manager.is_save_required(): with open(STATS_FILE_PATH, 'w') as stats_file: stats_manager.save_to_csv(stats_file, base_timecode) finally: video_manager.release()