File size: 2,821 Bytes
f72237c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import cv2
import os
import argparse
import numpy as np
from pathlib import Path

def capture_frames(video_path, output_dir, num_frames=3):
    """
    Captures the first num_frames frames from a video file and resizes them to 128x128 pixels.

    Args:
        video_path (str): Path to the video file
        output_dir (str): Directory to save the captured frames
        num_frames (int): Number of frames to capture from the start

    Returns:
        list: Paths to the saved frames
    """
    # Check if video exists
    if not os.path.isfile(video_path):
        raise FileNotFoundError(f"Video file not found: {video_path}")

    # Create output directory if it doesn't exist
    os.makedirs(output_dir, exist_ok=True)

    # Get video filename without extension
    video_name = Path(video_path).stem

    # Open the video file
    cap = cv2.VideoCapture(video_path)

    if not cap.isOpened():
        raise Exception(f"Error opening video file: {video_path}")

    # Get video properties
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = cap.get(cv2.CAP_PROP_FPS)
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

    print(f"Video Info:")
    print(f" Resolution: {width}x{height}")
    print(f" FPS: {fps:.2f}")
    print(f" Total Frames: {total_frames}")

    # Adjust num_frames if video is shorter
    if total_frames < num_frames:
        print(f"Warning: Video has only {total_frames} frames, adjusting to capture {total_frames} frames.")
        num_frames = total_frames

    saved_frames = []
    for i in range(num_frames):
        ret, frame = cap.read()
        if not ret:
            print(f"Error reading frame {i}")
            break

        resized_frame = cv2.resize(frame, (10, 10), interpolation=cv2.INTER_AREA)

        # Save resized frame
        frame_path = os.path.join(output_dir, f"{video_name}_frame_{i:03d}.png")
        cv2.imwrite(frame_path, resized_frame)
        saved_frames.append(frame_path)
        print(f"Saved frame {i+1}/{num_frames}: {frame_path}")

    cap.release()
    return saved_frames

def main():
    parser = argparse.ArgumentParser(description="Capture and resize frames from a video to 128x128 pixels")
    parser.add_argument("--video", required=True, help="Path to the video file")
    parser.add_argument("--output", default="frames", help="Directory to save the frames")
    parser.add_argument("--frames", type=int, default=3, help="Number of frames to capture from the start")
    args = parser.parse_args()

    try:
        saved_frames = capture_frames(args.video, args.output, args.frames)
        print(f"Successfully captured {len(saved_frames)} frames from the video")
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    main()