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()
Beispiel #3
0
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]
Beispiel #4
0
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_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()
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()
Beispiel #9
0
#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())