Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
def find_scenes(video_path, threshold=30.0):
    # Create our video & scene managers, then add the detector.
    video_manager = VideoManager([video_path])
    scene_manager = SceneManager()
    scene_manager.add_detector(ContentDetector(threshold=threshold))
    # Base timestamp at frame 0 (required to obtain the scene list).
    base_timecode = video_manager.get_base_timecode()
    # Improve processing speed by downscaling before processing.
    video_manager.set_downscale_factor()
    # Start the video manager and perform the scene detection.
    video_manager.start()
    scene_manager.detect_scenes(frame_source=video_manager)
    # Each returned scene is a tuple of the (start, end) timecode.
    return scene_manager.get_scene_list(base_timecode)
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
def find_scenes(videoURL):
    threshold = 30.0
    video_path = settings.MEDIA_ROOT
    video_path = video_path.replace('\\', '/')

    video_manager = VideoManager([video_path + videoURL])
    scene_manager = SceneManager()
    scene_manager.add_detector(ContentDetector(threshold=threshold))

    base_timecode = video_manager.get_base_timecode()
    #base_timecode = video_manager.get(cv2.CAP_PROP_POS_MSEC)
    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)

    return scene_manager.get_scene_list(base_timecode)
Ejemplo n.º 5
0
    def _find_scenes(self, video_path, threshold=30.0):
        """https://pyscenedetect.readthedocs.io/en/latest/

        Args:
            video_path ([type]): [description]
            threshold (float, optional): [description]. Defaults to 30.0.

        Returns:
            [type]: [description]
        """
        video_manager = VideoManager([video_path])
        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)
        time_frames = scene_manager.get_scene_list(base_timecode)
        return [(frame[0].get_frames(), frame[1].get_frames())
                for frame in time_frames]
Ejemplo n.º 6
0
            for threshold in random.sample(list_param, len(list_param)):
                algo = f"{algo_name}{threshold}"
                if os.path.exists(f"{outname}_{algo}.json"):
                    continue
                video_manager = VideoManager([filename])
                scene_manager = SceneManager()
                # for threshold in [10,20,30,40,50,60]:

                if algo_name == "ContentDetector":
                    scene_manager.add_detector(
                        ContentDetector(threshold=threshold))

                # list_param = [64, 128, 256, 32, 16, 8, 4]

                # Base timestamp at frame 0 (required to obtain the scene list).
                base_timecode = video_manager.get_base_timecode()

                # Improve processing speed by downscaling before processing.
                video_manager.set_downscale_factor()

                # Start the video manager and perform the scene detection.
                video_manager.start()
                scene_manager.detect_scenes(frame_source=video_manager)

                # Each returned scene is a tuple of the (start, end) timecode.
                results = scene_manager.get_scene_list(base_timecode)
                # print(" ")
                # print(" ")
                # print(results)
                print(f"{algo} found {len(results)} shots")
Ejemplo n.º 7
0
stats_path = 'result.csv'

video_manager = VideoManager([video_path])
stats_manager = StatsManager()
scene_manager = SceneManager(stats_manager)

scene_manager.add_detector(ContentDetector(threshold=50))

video_manager.set_downscale_factor()

video_manager.start()
scene_manager.detect_scenes(frame_source=video_manager)

# result
with open(stats_path, 'w') as f:
    stats_manager.save_to_csv(f, video_manager.get_base_timecode())

scene_list = scene_manager.get_scene_list()
print(f'{len(scene_list)} scenes detected!')

save_images(scene_list,
            video_manager,
            num_images=1,
            image_name_template='$SCENE_NUMBER',
            output_dir='scenes')

write_scene_list_html('result.html', scene_list)

for scene in scene_list:
    start, end = scene
Ejemplo n.º 8
0
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()