File size: 1,601 Bytes
8d2001a
8ce7fdb
c0ff040
8ce7fdb
b4e1ca3
8d2001a
4a23dca
 
bd9db3e
85cb9b5
8d2001a
8ce7fdb
8d2001a
 
 
8ce7fdb
 
86f6646
95eab87
bd9db3e
6fc3067
b74384a
95eab87
f50a5fd
 
 
2938c1f
 
b74384a
bd9db3e
f50a5fd
 
6fc3067
 
d4c877d
 
f50a5fd
 
 
d4c877d
8d2001a
2abe17e
8d2001a
d4c877d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import gradio as gr

from scenedetect import open_video, SceneManager
from scenedetect.detectors import ContentDetector
#from scenedetect.video_splitter import split_video_ffmpeg

from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip

outputs = []

def find_scenes(video_path, threshold=27.0):
    # Open our video, create a scene manager, and add a detector.
    video = open_video(video_path)
    scene_manager = SceneManager()
    scene_manager.add_detector(
        ContentDetector(threshold=threshold))
    scene_manager.detect_scenes(video, show_progress=True)
    scene_list = scene_manager.get_scene_list()
    
    outputs.append("json")
    #print(scene_list)
    shots = []
    
    for i, scene in enumerate(scene_list):
        shot_in = scene[0].get_frames() / scene[0].get_framerate()
        shot_out = (scene[1].get_frames() - 1) / scene[0].get_framerate()
        target_name = str(i)+"_cut.mp4"
        ffmpeg_extract_subclip(video_path, shot_in, shot_out, targetname=target_name)
        shots.append(target_name)
        outputs.append("video")
    #shot_in = scene_list[1][0].get_frames() / scene_list[1][0].get_framerate()
    #shot_out = (scene_list[1][1].get_frames() - 1) / scene_list[1][0].get_framerate()
    #print(shot_in, shot_out)
    
    print(scene_list, *tuple(shots), sep=', ')
    print(outputs)
    
    #ffmpeg_extract_subclip(video_path, shot_in, shot_out, targetname="cut.mp4")
    
    return scene_list, tuple(shots)

video_input=gr.Video(source="upload", format="mp4");

gr.Interface(fn=find_scenes, inputs=video_input, outputs=outputs).launch()