File size: 1,774 Bytes
58ac08a
 
87f3303
 
 
58ac08a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import cv2
import os
from dotenv import load_dotenv

load_dotenv() 

def extract_key_frames(video_path, start_sec, end_sec):
    cap = cv2.VideoCapture(video_path)
    fps = cap.get(cv2.CAP_PROP_FPS)

    start_frame = int(start_sec * fps)
    end_frame = int(end_sec * fps)
    mid_frame = (start_frame + end_frame) // 2

    frames = []
    for frame_number in [start_frame, mid_frame, end_frame]:
        cap.set(cv2.CAP_PROP_POS_FRAMES, frame_number)
        ret, frame = cap.read()
        if ret:
            frames.append(frame)

    cap.release()
    return frames

def save_frames_locally(frames, event_id):
    os.makedirs("/data", exist_ok=True)
    frame_paths = []
    for idx, frame in enumerate(frames):
        path = f"/data/frame_{event_id}_{idx}.jpg"
        cv2.imwrite(path, frame)
        frame_paths.append(path)
    return frame_paths

def generate_frame_urls(frame_paths):
    base_url = os.getenv("SPACE_URL", "http://localhost:8000")
    return [f"{base_url}/data/{os.path.basename(path)}" for path in frame_paths]

def match_transcript_to_events(events, transcript):
    for event in events:
        matched_lines = [
            line["text"] for line in transcript
            if line["start_sec"] <= event["end_sec"] and line["end_sec"] >= event["start_sec"]
        ]
        event["transcript"] = "\n".join(matched_lines) or "(No matching commentary)"
    return events

def clip_video_segment(video_path, start_sec, end_sec, event_id):
    output_path = f"/data/clip_{event_id}.mp4"
    duration = end_sec - start_sec

    command = [
        "ffmpeg", "-y",
        "-ss", str(start_sec),
        "-i", video_path,
        "-t", str(duration),
        "-c", "copy", output_path
    ]
    os.system(" ".join(command))
    return output_path