uvscan_kitchen_heatmap / extract_frames.py
mlbench123's picture
Upload 4 files
a63ce99 verified
import cv2
import os
def video_to_keyframes(video_path, output_folder, frame_interval=1, prefix='frame'):
"""
Convert video to keyframes (individual frames) and save as images
Args:
video_path (str): Path to input video file
output_folder (str): Directory to save extracted frames
frame_interval (int): Extract every nth frame (1=every frame)
prefix (str): Prefix for saved frame files
"""
# Create output directory if it doesn't exist
os.makedirs(output_folder, exist_ok=True)
# Open the video file
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
raise ValueError(f"Could not open video {video_path}")
# Get video properties
fps = cap.get(cv2.CAP_PROP_FPS)
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
duration = total_frames / fps
print(f"Video Info:")
print(f"- Path: {video_path}")
print(f"- FPS: {fps}")
print(f"- Total Frames: {total_frames}")
print(f"- Duration: {duration:.2f} seconds")
print(f"- Extracting every {frame_interval} frame(s)")
frame_count = 0
saved_count = 0
while True:
ret, frame = cap.read()
# Stop if we've reached the end of the video
if not ret:
break
# Only process frames at the specified interval
if frame_count % frame_interval == 0:
# Save frame as image file
frame_filename = f"{prefix}_{saved_count:06d}.jpg"
output_path = os.path.join(output_folder, frame_filename)
cv2.imwrite(output_path, frame)
saved_count += 1
# Print progress every 100 frames
if saved_count % 100 == 0:
print(f"Saved frame {saved_count} (original frame {frame_count})")
frame_count += 1
# Release resources
cap.release()