jschwab21 commited on
Commit
f5e8a49
·
verified ·
1 Parent(s): 6279c59

Update video_processing.py

Browse files
Files changed (1) hide show
  1. video_processing.py +28 -10
video_processing.py CHANGED
@@ -1,7 +1,7 @@
1
  import cv2
2
- from scenedetect import open_video, SceneManager
3
  from scenedetect.detectors import ContentDetector
4
- from moviepy.editor import VideoFileClip, concatenate_videoclips
5
  from transformers import CLIPProcessor, CLIPModel
6
  import torch
7
  import yt_dlp
@@ -12,7 +12,7 @@ def process_video(video_url, description):
12
  video_path = download_video(video_url)
13
 
14
  # Segment video into scenes
15
- scenes = detect_scenes(video_path)
16
 
17
  # Extract frames and analyze with CLIP model
18
  best_scene = analyze_scenes(video_path, scenes, description)
@@ -33,14 +33,30 @@ def process_video(video_url, description):
33
 
34
  return final_clip_path
35
 
36
- def detect_scenes(video_path):
37
- video = open_video(video_path)
 
38
  scene_manager = SceneManager()
39
- scene_manager.add_detector(ContentDetector())
40
- scene_manager.detect_scenes(video)
 
 
 
 
 
 
 
 
41
  scene_list = scene_manager.get_scene_list()
 
 
42
  return scene_list
43
 
 
 
 
 
 
44
  def analyze_scenes(video_path, scenes, description):
45
  # Load CLIP model and processor
46
  model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
@@ -82,9 +98,11 @@ def extract_best_scene(video_path, scene):
82
  if scene is None:
83
  return VideoFileClip(video_path) # Return the entire video if no scene is found
84
 
85
- start_time = scene[0].get_seconds()
86
- end_time = scene[1].get_seconds()
87
- video_clip = VideoFileClip(video_path).subclip(start_time, end_time)
 
 
88
  return video_clip
89
 
90
  def download_video(video_url):
 
1
  import cv2
2
+ from scenedetect import open_video, SceneManager, VideoManager
3
  from scenedetect.detectors import ContentDetector
4
+ from moviepy.editor import VideoFileClip
5
  from transformers import CLIPProcessor, CLIPModel
6
  import torch
7
  import yt_dlp
 
12
  video_path = download_video(video_url)
13
 
14
  # Segment video into scenes
15
+ scenes = find_scenes(video_path)
16
 
17
  # Extract frames and analyze with CLIP model
18
  best_scene = analyze_scenes(video_path, scenes, description)
 
33
 
34
  return final_clip_path
35
 
36
+ def find_scenes(video_path):
37
+ # Create a video manager object for the video
38
+ video_manager = VideoManager([video_path])
39
  scene_manager = SceneManager()
40
+
41
+ # Add ContentDetector algorithm with a threshold. Adjust threshold as needed.
42
+ scene_manager.add_detector(ContentDetector(threshold=30))
43
+
44
+ # Start the video manager and perform scene detection
45
+ video_manager.set_downscale_factor()
46
+ video_manager.start()
47
+ scene_manager.detect_scenes(frame_source=video_manager)
48
+
49
+ # Obtain list of detected scenes as timecodes
50
  scene_list = scene_manager.get_scene_list()
51
+ video_manager.release()
52
+
53
  return scene_list
54
 
55
+ def convert_timestamp_to_seconds(timestamp):
56
+ """Convert a timestamp in HH:MM:SS format to seconds."""
57
+ h, m, s = map(float, timestamp.split(':'))
58
+ return int(h) * 3600 + int(m) * 60 + s
59
+
60
  def analyze_scenes(video_path, scenes, description):
61
  # Load CLIP model and processor
62
  model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
 
98
  if scene is None:
99
  return VideoFileClip(video_path) # Return the entire video if no scene is found
100
 
101
+ start_time = scene[0].get_timecode()
102
+ end_time = scene[1].get_timecode()
103
+ start_seconds = convert_timestamp_to_seconds(start_time)
104
+ end_seconds = convert_timestamp_to_seconds(end_time)
105
+ video_clip = VideoFileClip(video_path).subclip(start_seconds, end_seconds)
106
  return video_clip
107
 
108
  def download_video(video_url):