motion-sampler

Version: 1.0 Type: Video Frame Extraction Purpose: Extract representative frame samples from dashcam videos to understand motion and trajectory without storing full videos

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "motion-sampler" with this command: npx skills add yousufjoyian/claude-skills/yousufjoyian-claude-skills-motion-sampler

Motion Sampler Skill

Version: 1.0 Type: Video Frame Extraction Purpose: Extract representative frame samples from dashcam videos to understand motion and trajectory without storing full videos

Overview

The Motion Sampler extracts frames at regular intervals from dashcam videos to create a compact visual summary of vehicle movement and location changes. This achieves 90-95% storage reduction compared to keeping original videos while preserving spatial and temporal context.

Use Cases

  • Motion trajectory analysis - Understand vehicle path through a sequence of locations

  • Storage optimization - Reduce dashcam archive size by 90%+ while retaining visual record

  • Quick visual review - Browse through hours of footage via representative frames

  • Location identification - Identify where vehicle was at specific times

  • Event timeline - Create visual timeline of trips without watching full videos

Natural Language Interface

Use natural language to request frame extraction:

Example Requests:

Extract frames every 10 seconds from all Movie_F videos in the CARDV folder.

Sample frames from Movie_R dashcam videos, one frame every 15 seconds.

Create motion samples for all parking camera videos with 5-second intervals.

Extract representative frames from Movie_F and Movie_R for July 27-29, 2025.

Parameters

Required

camera (string): Camera type to process

  • Options: Movie_F , Movie_R , Park_F , Park_R , or all

  • Default: Movie_F

source_dir (path): Root directory containing camera folders

  • Example: C:\Users\yousu\Desktop\CARDV

Optional

sample_interval (float): Seconds between extracted frames

  • Range: 1.0 - 60.0

  • Default: 10.0

  • Examples: 5.0 (dense sampling), 15.0 (sparse sampling)

output_dir (path): Where to save extracted frames

  • Default: {source_dir}/MOTION_SAMPLES

jpeg_quality (int): JPEG compression quality

  • Range: 50 - 100

  • Default: 92 (visually lossless)

  • Lower = smaller files, slightly reduced quality

max_workers (int): Parallel processing threads

  • Range: 1 - 8

  • Default: 4

  • Higher = faster but more CPU usage

date_filter (string): Only process videos from specific date(s)

  • Format: YYYYMMDD or YYYYMMDD-YYYYMMDD (range)

  • Example: 20250727 or 20250727-20250729

min_duration (float): Skip videos shorter than this (seconds)

  • Default: 3.0

Advanced (Future GPU Enhancement)

use_nvdec (bool): Use NVIDIA hardware decoding

  • Default: false (CPU-only in v1.0)

  • Future: true for 3-5x speedup

gpu_id (int): CUDA device ID if multiple GPUs

  • Default: 0

Output Format

Directory Structure

{output_dir}/ ├── INDEX.csv # Comprehensive metadata ├── 20250727150654_052278A_F001_001000ms.jpg # Frame 1 at 1s ├── 20250727150654_052278A_F002_011000ms.jpg # Frame 2 at 11s ├── 20250727150654_052278A_F003_021000ms.jpg # Frame 3 at 21s └── ...

Filename Format

{YYYYMMDDHHMMSS}{FILEIDA/B}{POSITION}_{TIMESTAMP_MS}ms.jpg

Example: 20250727150654_052278A_F003_021000ms.jpg └─────┬─────┘ └──┬──┘ └┬┘ └───┬───┘ Date/Time FileID Pos Timestamp

Components:

  • YYYYMMDDHHMMSS: Video start time
  • FILEIDA/B: Camera file ID + suffix (A=front, B=rear)
  • F###: Frame position (F001, F002, F003...)
  • ######ms: Milliseconds into video

INDEX.csv Schema

original_video,frame_file,camera,date,position,timestamp_ms,timestamp_s,frame_number,file_size_kb 20250727150654_052278A.MP4,20250727150654_052278A_F001_001000ms.jpg,Movie_F,20250727,F001,1000,1.0,24,1713.06

Columns:

  • original_video : Source MP4 filename

  • frame_file : Extracted JPEG filename

  • camera : Camera type (Movie_F/Movie_R/Park_F/Park_R)

  • date : YYYYMMDD

  • position : Frame position (F001, F002...)

  • timestamp_ms : Milliseconds into video

  • timestamp_s : Seconds into video

  • frame_number : Frame number in video (at 24fps)

  • file_size_kb : JPEG file size in KB

Performance Metrics

Current (CPU-only v1.0)

  • Throughput: 6-8 videos/second (4 workers, Intel i7/i9)

  • Speedup: 4x with multi-threading

  • Memory: ~500 MB

  • GPU Usage: 0% (CPU-only)

Projected (GPU-accelerated v2.0)

  • Throughput: 20-30 videos/second (NVDEC + multi-threading)

  • Speedup: 10-15x vs single-threaded CPU

  • Memory: ~1-2 GB

  • GPU Usage: 30-50% (NVDEC decoder only)

Storage Examples

Input: 418 Movie_F/R videos, 60s avg, ~45 GB total

Interval Frames/Video Total Frames Storage Reduction

5s 12 5,016 9 GB 80%

10s 7 2,926 5 GB 89%

15s 5 2,090 3.7 GB 92%

30s 3 1,254 2.2 GB 95%

Assumes 1.7 MB per frame average at 4K resolution

Algorithm Details

Frame Sampling Strategy

For each video:

  • Skip buffer zones: Start at 1.0s, end at duration-1.0s (avoids black frames)

  • Calculate sample timestamps: Every N seconds starting from 1.0s

  • Always include end frame: Last frame at duration-1.0s

  • Example for 60s video, 10s interval:

  • F001: 1s, F002: 11s, F003: 21s, F004: 31s, F005: 41s, F006: 51s, F007: 59s

Pseudo-code

timestamps = [] current_time = 1.0 # start offset while current_time < (duration - 1.0): timestamps.append(current_time) current_time += sample_interval timestamps.append(duration - 1.0) # always include end

Error Handling

Automatic Handling

  • Short videos (<3s): Skipped with warning

  • Corrupted files: Logged as error, processing continues

  • Unreadable frames: Frame skipped, next frame attempted

  • Disk full: Graceful termination with partial results saved

Error Messages

SKIP: video.MP4 too short (2.1s) ERROR: Cannot open corrupted_video.MP4 WARNING: Failed to read frame 120 from video.MP4

Example Usage

Request 1: Standard Extraction

Use the motion-sampler skill to extract frames every 10 seconds from all Movie_F videos in C:\Users\yousu\Desktop\CARDV. Save to MOTION_SAMPLES folder.

Execution:

  • Camera: Movie_F

  • Source: C:\Users\yousu\Desktop\CARDV\Movie_F\

  • Output: C:\Users\yousu\Desktop\CARDV\MOTION_SAMPLES\

  • Interval: 10.0s

  • Quality: 92

Request 2: Dense Sampling for Specific Date

Extract frames every 5 seconds from Movie_R videos on July 27, 2025.

Execution:

  • Camera: Movie_R

  • Date filter: 20250727

  • Interval: 5.0s

  • Only processes videos matching 20250727*.MP4

Request 3: Sparse Sampling for Long-term Archive

Create motion samples with 30-second intervals for all parking cameras (Park_F and Park_R) to minimize storage while keeping a visual record.

Execution:

  • Camera: Park_F, Park_R (both)

  • Interval: 30.0s

  • Expected: ~3 frames per 60s video

  • Storage: Minimal (~1-2 GB for thousands of videos)

Troubleshooting

Issue: Processing Very Slow

Solution: Increase max_workers to 6-8 (if you have 8+ CPU cores)

Issue: Large Output Size

Solution: Reduce jpeg_quality to 85 or increase sample_interval to 15-20s

Issue: Missing Some Videos

Cause: Videos shorter than min_duration (default 3s) are skipped Solution: Lower min_duration to 1.0s if you need very short clips

Issue: Out of Memory

Cause: Too many parallel workers on low-RAM system Solution: Reduce max_workers to 2

Future Enhancements (v2.0 Roadmap)

GPU Acceleration

  • NVDEC hardware video decoding (5-10x speedup)

  • GPU-accelerated JPEG encoding

  • Multi-GPU support for massive archives

  • Automatic GPU/CPU fallback

Advanced Features

  • Smart sampling (detect motion, skip static scenes)

  • Face/person detection integration

  • GPS overlay preservation

  • Thumbnail strip generation

  • Web viewer for browsing samples

Optimization

  • Incremental processing (skip already-processed videos)

  • Resume from interruption

  • S3/cloud storage output

  • Real-time progress dashboard

Technical Dependencies

Required

  • Python 3.8+

  • opencv-python (cv2) >= 4.8

  • numpy >= 1.24

  • pandas >= 2.0 (for INDEX.csv)

Optional (for future GPU support)

  • cuda >= 11.0

  • opencv-contrib-python (CUDA build)

File Locations

G:\My Drive\PROJECTS\skills\motion-sampler
├── skill.md # This file ├── README.md # Quick start guide ├── SKILL_MANIFEST.md # File inventory & testing ├── scripts/ │ ├── extract_motion_samples.py # Main extraction script │ └── analyze_results.py # Post-processing analysis ├── assets/ │ ├── config_template.json # Default configuration │ └── camera_mapping.json # Camera ID mapping └── references/ ├── SAMPLING_ALGORITHM.md # Detailed algorithm docs └── PERFORMANCE_BENCHMARKS.md # Speed/storage benchmarks

JSON API Contract

For programmatic invocation:

{ "camera": "Movie_F", "source_dir": "C:\Users\yousu\Desktop\CARDV", "output_dir": "C:\Users\yousu\Desktop\CARDV\MOTION_SAMPLES", "sample_interval": 10.0, "jpeg_quality": 92, "max_workers": 4, "date_filter": null, "min_duration": 3.0, "use_nvdec": false }

Response:

{ "status": "success", "videos_processed": 2146, "frames_extracted": 15022, "total_size_mb": 26750.5, "avg_frames_per_video": 7.0, "processing_time_s": 305.2, "throughput_videos_per_sec": 7.03, "output_dir": "C:\Users\yousu\Desktop\CARDV\MOTION_SAMPLES", "index_file": "C:\Users\yousu\Desktop\CARDV\MOTION_SAMPLES\INDEX.csv" }

License & Attribution

Part of the dashcam analysis suite. Designed for personal dashcam archive management and motion trajectory analysis.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

tesseract

No summary provided by upstream source.

Repository SourceNeeds Review
General

context-extract

No summary provided by upstream source.

Repository SourceNeeds Review
General

a2ui-embed

No summary provided by upstream source.

Repository SourceNeeds Review
General

video-downloader

No summary provided by upstream source.

Repository SourceNeeds Review