Spaces:
Sleeping
Sleeping
| """ | |
| extract_frames.py — Extract frames from videos for dataset creation | |
| Usage: | |
| python extract_frames.py --video traffic.mp4 --out frames/ --every 15 | |
| """ | |
| import cv2 | |
| import argparse | |
| from pathlib import Path | |
| def extract_frames(video_path: str, out_dir: str, every: int = 10, max_frames: int = 5000): | |
| cap = cv2.VideoCapture(video_path) | |
| out = Path(out_dir) | |
| out.mkdir(parents=True, exist_ok=True) | |
| n, saved = 0, 0 | |
| while True: | |
| ret, frame = cap.read() | |
| if not ret or saved >= max_frames: | |
| break | |
| if n % every == 0: | |
| fp = out / f"frame_{saved:06d}.jpg" | |
| cv2.imwrite(str(fp), frame) | |
| saved += 1 | |
| n += 1 | |
| cap.release() | |
| print(f"Saved {saved} frames to {out_dir}") | |
| if __name__ == "__main__": | |
| p = argparse.ArgumentParser() | |
| p.add_argument("--video", required=True) | |
| p.add_argument("--out", default="frames") | |
| p.add_argument("--every", type=int, default=10) | |
| p.add_argument("--max", type=int, default=5000) | |
| args = p.parse_args() | |
| extract_frames(args.video, args.out, args.every, args.max) | |