File size: 1,315 Bytes
ba74f1a
 
 
 
 
 
 
 
 
 
 
7da3c66
ba74f1a
7da3c66
ba74f1a
7da3c66
 
 
 
 
 
 
ba74f1a
 
 
 
7da3c66
ba74f1a
 
 
 
 
 
 
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
import os
import cv2
from pathlib import Path

def extract_frames(video_path, output_dir, fps=2):
    os.makedirs(output_dir, exist_ok=True)
    vidcap = cv2.VideoCapture(video_path)
    video_name = Path(video_path).stem
    count = 0
    frame_id = 1
    success, image = vidcap.read()
    failed = 0
    while success:
        if int(vidcap.get(cv2.CAP_PROP_POS_FRAMES)) % max(1, int(vidcap.get(cv2.CAP_PROP_FPS) // fps)) == 0:
            frame_name = f"{video_name}_{frame_id:04d}.png"
            out_path = os.path.abspath(os.path.join(output_dir, frame_name))
            ok = cv2.imwrite(out_path, image)
            if not ok:
                print(f"[ERROR] Failed to write frame: {out_path}")
                failed += 1
            elif frame_id <= 5:
                print(f"[DEBUG] Wrote frame: {out_path}")
            frame_id += 1
        success, image = vidcap.read()
        count += 1
    vidcap.release()
    print(f"Extracted {frame_id-1} frames from {video_path}. Failed writes: {failed}")

if __name__ == "__main__":
    video_dir = "videos"
    frames_dir = "frames"
    for video_file in os.listdir(video_dir):
        if video_file.lower().endswith(('.mp4', '.avi', '.mov')):
            extract_frames(os.path.join(video_dir, video_file), frames_dir)