from typing import Any, Optional import cv2 def get_video_frame(video_path: str, frame_number: int = 0) -> Optional[Any]: """Retrieve a specific frame from a video.""" capture = cv2.VideoCapture(video_path) if not capture.isOpened(): print(f"Error: Cannot open video file {video_path}") return None frame_total = int(capture.get(cv2.CAP_PROP_FRAME_COUNT)) # Ensure frame_number is within the valid range frame_number = max(0, min(frame_number, frame_total - 1)) capture.set(cv2.CAP_PROP_POS_FRAMES, frame_number) has_frame, frame = capture.read() capture.release() if not has_frame: print(f"Error: Cannot read frame {frame_number} from {video_path}") return None return frame def get_video_frame_total(video_path: str) -> int: """Get the total number of frames in a video.""" capture = cv2.VideoCapture(video_path) if not capture.isOpened(): print(f"Error: Cannot open video file {video_path}") return 0 frame_total = int(capture.get(cv2.CAP_PROP_FRAME_COUNT)) capture.release() return frame_total