File size: 1,645 Bytes
8d2001a
8ce7fdb
c0ff040
8ce7fdb
b4e1ca3
8d2001a
4a23dca
 
bd9db3e
95a9f65
 
 
 
 
 
85cb9b5
8d2001a
8ce7fdb
8d2001a
 
 
8ce7fdb
 
86f6646
95eab87
bd9db3e
95a9f65
6fc3067
95a9f65
95eab87
f50a5fd
 
 
2938c1f
 
95a9f65
bd9db3e
f50a5fd
 
6fc3067
 
95a9f65
f50a5fd
 
 
95a9f65
 
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
45
46
47
48
49
50
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 = []
data_outputs = []

def fn(list):
    return tuple(list);



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")
    data_outputs.append(scene_list)
    #print(scene_list)
    
    
    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)
        data_outputs.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)
    
    results = fn(data_outputs)
    
    #ffmpeg_extract_subclip(video_path, shot_in, shot_out, targetname="cut.mp4")
    
    return results
    
video_input=gr.Video(source="upload", format="mp4");

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