#!/usr/bin/env python3 import argparse import sys from pathlib import Path import cv2 as cv parser = argparse.ArgumentParser(description="Display a video file with OpenCV HighGUI.") parser.add_argument("video", help="path to a readable video file") parser.add_argument("--delay-ms", type=int, default=25, help="wait time between frames") parser.add_argument("--max-frames", type=int, default=0, help="stop after this many frames; 0 means no limit") parser.add_argument("--window-title", default="OpenCV video preview", help="HighGUI window title") args = parser.parse_args() video_path = Path(args.video) cap = cv.VideoCapture(str(video_path)) if not cap.isOpened(): sys.exit(f"Cannot open video: {video_path}") backend = cap.getBackendName() width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT)) frames_displayed = 0 stopped_by_key = False try: while True: ok, frame = cap.read() if not ok or frame is None: break cv.imshow(args.window_title, frame) frames_displayed += 1 key = cv.waitKey(args.delay_ms) & 0xFF if key == ord("q"): stopped_by_key = True break if args.max_frames and frames_displayed >= args.max_frames: break finally: cap.release() cv.destroyAllWindows() if frames_displayed == 0: sys.exit(f"No frames were displayed from {video_path}") print(f"Opened: {video_path}") print(f"Backend: {backend}") print(f"Frame size: {width}x{height}") print(f"Displayed frames: {frames_displayed}") if stopped_by_key: print("Stopped by key: q") print("Closed OpenCV window")