Spaces:
Sleeping
Sleeping
| from typing import List, Tuple | |
| import cv2 | |
| import numpy as np | |
| def extract_frames(video_path: str) -> Tuple[List[np.ndarray], float, int, int]: | |
| cap = cv2.VideoCapture(video_path) | |
| if not cap.isOpened(): | |
| raise ValueError("Unable to open video.") | |
| fps = cap.get(cv2.CAP_PROP_FPS) or 0.0 | |
| width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) | |
| height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) | |
| frames: List[np.ndarray] = [] | |
| success, frame = cap.read() | |
| while success: | |
| frames.append(frame) | |
| success, frame = cap.read() | |
| cap.release() | |
| if not frames: | |
| raise ValueError("Video decode produced zero frames.") | |
| return frames, fps, width, height | |
| def write_video(frames: List[np.ndarray], output_path: str, fps: float, width: int, height: int) -> None: | |
| if not frames: | |
| raise ValueError("No frames available for writing.") | |
| fourcc = cv2.VideoWriter_fourcc(*"mp4v") | |
| writer = cv2.VideoWriter(output_path, fourcc, fps or 1.0, (width, height)) | |
| if not writer.isOpened(): | |
| raise ValueError("Failed to open VideoWriter.") | |
| for frame in frames: | |
| writer.write(frame) | |
| writer.release() | |