def video_to_jpg_hd(video_path, output_folder, quality=95, frame_interval=1): """ Extract HD JPG frames from a video. Args: video_path: Path to input video file output_folder: Folder to save JPG images quality: JPG quality (0-100, default 95 for HD) frame_interval: Extract every Nth frame (1 = all frames) """ # Create output folder if it doesn't exist if not os.path.exists(output_folder): os.makedirs(output_folder) # Open video cap = cv2.VideoCapture(video_path) if not cap.isOpened(): print("Error: Could not open video.") return # Get video properties fps = int(cap.get(cv2.CAP_PROP_FPS)) total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) print(f"Video: {width}x{height}, {fps} fps, {total_frames} frames") frame_count = 0 saved_count = 0 while True: ret, frame = cap.read() if not ret: break # Save every Nth frame if frame_count % frame_interval == 0: output_path = os.path.join(output_folder, f"frame_{saved_count:06d}.jpg") # Use high quality JPG encoding cv2.imwrite(output_path, frame, [cv2.IMWRITE_JPEG_QUALITY, quality]) saved_count += 1 if saved_count % 100 == 0: print(f"Saved {saved_count} frames...") frame_count += 1 cap.release() print(f"Done! Saved {saved_count} HD JPG frames to '{output_folder}'")
import cv2 import os
ffmpeg -i input.mp4 -vf "fps=1" -compression_level 0 frames/frame_%06d.png The script preserves the original video resolution (e.g., 1920x1080) with adjustable JPG quality. video to jpg hd converter