Spaces:
Sleeping
Sleeping
File size: 2,260 Bytes
8d2001a ae4b7d0 9724d68 8ce7fdb c0ff040 8ce7fdb b4e1ca3 8d2001a 4a23dca 63ce649 95a9f65 ae4b7d0 95a9f65 63ce649 85cb9b5 8d2001a 8ce7fdb 8d2001a 8ce7fdb 86f6646 95eab87 75542d6 95a9f65 6fc3067 95a9f65 831716d 63ce649 95eab87 f50a5fd 2938c1f 95a9f65 831716d ae4b7d0 63ce649 3b4ac51 63ce649 75542d6 f50a5fd 6fc3067 95a9f65 86798c5 63ce649 f50a5fd 63ce649 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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
import gradio as gr
import cv2
import numpy as np
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 = ["json", "file"]
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)
shots = []
stills = []
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)
shots.append(target_name)
video = cv2.VideoCapture(video_path)
fps = video.get(cv2.CAP_PROP_FPS)
print('frames per second =',fps)
frame_id = scene[0].get_frames()
video.set(cv2.CAP_PROP_POS_FRAMES, frame_id)
ret, frame = video.read()
# Display and save frame
#cv2.imshow('frame', frame); cv2.waitKey(0)
img = str(frame_id) + '_screenshot.png'
cv2.imwrite(img,frame)
stills.append(img)
#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)
print(results)
print(stills)
#ffmpeg_extract_subclip(video_path, shot_in, shot_out, targetname="cut.mp4")
return scene_list, shots
video_input=gr.Video(source="upload", format="mp4");
gr.Interface(fn=find_scenes, inputs=video_input, outputs=outputs).launch() |