Files
shellfiles/bin/wsl/screencapture.py
2026-01-19 21:36:25 -05:00

69 lines
2.0 KiB
Python
Executable File

#!/usr/bin/python3
import argparse
import os
import cv2
def capture_and_resize_frame(video_path, capture_time=180):
# Extract the base filename from the video path
base_filename = os.path.splitext(os.path.basename(video_path))[0]
output_image_path = f"{base_filename}_screencapture.jpg"
# Open the video file
video = cv2.VideoCapture(video_path)
# Get the frames per second (fps) of the video
fps = video.get(cv2.CAP_PROP_FPS)
# Calculate the frame number for the specified capture time (180 seconds by default)
frame_number = int(fps * capture_time)
# Set the frame position to the capture time in the video
video.set(cv2.CAP_PROP_POS_FRAMES, frame_number)
# Read the frame
success, frame = video.read()
# Check if the frame was successfully read
if success:
# Save the frame as an image temporarily
temp_image_path = 'temp_screencapture.jpg'
cv2.imwrite(temp_image_path, frame)
#print(f"Frame at {capture_time} seconds saved as {temp_image_path}")
# Load the captured image for resizing
image = cv2.imread(temp_image_path)
# Set new dimensions
new_width, new_height = 960, 540
# Resize the image
resized_image = cv2.resize(image, (new_width, new_height))
# Save the resized image with the new output path
cv2.imwrite(output_image_path, resized_image)
print(f"Screen capture resized and saved as {output_image_path}")
else:
print("Failed to capture the frame, video shorter than 3 mins.")
# Release the video
video.release()
# Remove the temporary file
os.remove(temp_image_path)
def main():
# Set up argument parser
parser = argparse.ArgumentParser(description="Extract and resize a frame from a video.")
parser.add_argument("video_path", type=str, help="Path to the video file")
# Parse arguments
args = parser.parse_args()
# Call the capture and resize function
capture_and_resize_frame(args.video_path)
if __name__ == "__main__":
main()