Dashcam Frame Extraction Skill
Purpose
This skill provides automated GPU-accelerated frame extraction for Movie_F dashcam videos. It extracts 3 frames per video (BEGIN at 1s, MIDDLE at 50%, END at duration-1s) using NVIDIA CUDA hardware acceleration, processes videos in parallel batches, and handles HEVC-encoded videos with the critical fixes required for successful extraction.
When to Use This Skill
Use this skill when:
-
User requests frame extraction from Movie_F dashcam videos
-
User places new videos in /mnt/windows/Users/yousu/Desktop/CARDV/Movie_F/
-
User asks to "extract frames from Movie_F videos" or similar requests
-
User needs to process dashcam footage for analysis or sampling
Important: This skill is specifically for Movie_F category only. Do not use for Park_F, Park_R, or other categories.
Quick Start
To extract frames from Movie_F videos:
cd /home/yousuf/GoogleDrive/PROJECTS/skills/Dashcam/scripts bash run_extraction.sh
The script will:
-
Verify system requirements (GPU, disk space, FFmpeg)
-
Identify new videos needing extraction via gap analysis
-
Create batches of 50 videos each
-
Launch 4 parallel GPU workers
-
Monitor progress with updates every 30 seconds
-
Extract 3 frames per video to Google Drive
How to Use This Skill
Step 1: Read Agent Instructions (First Time)
For the first use or to understand the complete workflow, read the agent instructions:
cat references/AGENT_INSTRUCTIONS.md
This provides comprehensive guidance on:
-
Your role as the extraction agent
-
Expected workflow and user interaction
-
Troubleshooting common issues
-
Performance expectations
-
Error handling
Step 2: Run the Main Extraction Script
Execute the main orchestration script:
cd scripts bash run_extraction.sh
This script handles the entire pipeline automatically:
-
Pre-flight checks (GPU, FFmpeg, Python, disk space)
-
Gap analysis (compares source videos vs existing frames)
-
Batch creation (splits videos into batches of 50)
-
Coordinator launch (manages parallel workers)
-
Progress monitoring (displays updates every 30 seconds)
Step 3: Monitor Progress
Progress updates appear automatically every 30 seconds showing:
-
Videos processed / Total
-
Batches completed
-
Active workers
-
Processing speed (videos/min)
-
GPU utilization
-
Estimated time remaining
Example output:
════════════════════════════════════════════════════════════════ 📊 EXTRACTION PROGRESS - 02:15:30 PM Videos: 45/150 (30%) | Batches: 1/3 | Workers: 4 Speed: 18.5 vids/min | 55.5 fps | ETA: 0.2h | GPU: 85% ════════════════════════════════════════════════════════════════
Step 4: Verify Results
After completion, check extraction results:
bash scripts/show_results.sh
This displays:
-
Baseline frame count
-
Current frame count
-
New frames extracted
-
Videos processed
-
Success rate
Step 5: Verify Skill Health (Optional)
To verify the skill is properly configured and ready to use:
bash scripts/verify_skill.sh
This checks:
-
All required files present
-
Scripts are executable
-
System requirements (GPU, FFmpeg, Python, disk space)
-
Source and output directories accessible
Core Scripts
The skill includes these executable scripts in scripts/ :
Main Scripts
run_extraction.sh - Main orchestration script
-
Entry point for frame extraction
-
Handles pre-flight checks
-
Performs gap analysis
-
Creates batches
-
Launches coordinator and monitor
extract_frames_worker.py - GPU worker process
-
Processes individual video batches
-
Uses CUDA for GPU-accelerated decoding
-
Extracts 3 frames per video
-
Critical HEVC fix applied (no CUDA output format)
-
Handles timeouts (30 seconds per frame)
coordinator.sh - Parallel batch coordinator
-
Manages 4 parallel workers
-
Monitors disk space (25GB minimum)
-
Handles worker lifecycle
-
Strict error handling (exits on any failure)
monitor.sh - Progress monitoring
-
Displays progress updates every 30 seconds
-
Calculates processing speed and ETA
-
Shows GPU utilization
-
Non-intrusive (doesn't clear screen)
Utility Scripts
show_results.sh - Display extraction results
-
Shows baseline vs current frame counts
-
Calculates videos processed
-
Displays success rate
verify_skill.sh - Skill verification
-
Checks all documentation files present
-
Verifies scripts are executable
-
Tests system requirements
-
Validates configured paths
auto_extract_movie_f.sh - Legacy script
-
Original all-in-one script (kept for reference)
-
Use run_extraction.sh instead
Reference Documentation
The skill includes comprehensive documentation in references/ :
For Agents
-
AGENT_INSTRUCTIONS.md - Complete agent guide with responsibilities, troubleshooting, and workflow
-
START_HERE.md - Quick start entry point for agents
Technical Documentation
-
DOCUMENTATION.md - Complete technical details, architecture, and fixes
-
CRITICAL_FIXES_CHECKLIST.md - Pre-flight verification and troubleshooting guide
-
QUICK_REFERENCE.md - One-page command reference
Overview
-
SKILL_README.md - Skill overview and features
-
README.md - Project background and history
-
INDEX.md - File navigation and directory structure
Configuration
-
config.json - All settings, paths, and parameters
-
requirements.txt - System dependencies and requirements
Critical Knowledge
- HEVC CUDA Compatibility Fix
Problem: Videos are HEVC (H.265) encoded. Using -hwaccel_output_format cuda breaks JPEG conversion.
Solution: The worker script uses -hwaccel cuda for decoding ONLY, not output format.
Location: scripts/extract_frames_worker.py lines 46-48
Impact: Without this fix, 0% of videos will succeed.
- Strict Error Handling
Configuration: Pipeline exits immediately on ANY failure.
Coordinator: Uses set -euo pipefail (strict mode)
Worker: Returns exit code 1 if any videos fail
Why: All videos must succeed. If any fail, investigate before continuing.
- Filename Pattern Variations
Videos have inconsistent naming:
-
20250916042109_062060A.MP4
-
20250916042109_062060_A.MP4
-
20250916042109_062060.MP4
Solution: Gap analysis checks all variations automatically.
- Timeout Management
Each frame extraction has a 30-second timeout. Videos that timeout are marked as failed and stop the pipeline.
Configuration: extract_frames_worker.py line 62
Configuration Settings
All settings are in references/config.json :
{ "num_workers": 4, // Parallel GPU workers "batch_size": 50, // Videos per batch "min_free_gb": 25, // Minimum disk space required "timeout_seconds": 30 // Timeout per frame extraction }
Paths:
-
Source: /mnt/windows/Users/yousu/Desktop/CARDV/Movie_F
-
Output: /home/yousuf/GoogleDrive/PROJECTS/INVESTIGATION/DASHCAM/FRAMES_CLIPS/Movie_F&R_MotionSamples
-
Work Dir: /home/yousuf/PROJECTS/PeopleNet/FrameExtraction
-
Staging: /home/yousuf/PROJECTS/PeopleNet/Staging
Performance Expectations
-
Speed: 15-20 videos/minute
-
GPU Utilization: 60-90%
-
Success Rate: 100% (stops on any failure)
-
Frames per Video: 3 (BEGIN, MIDDLE, END)
-
Batch Size: 50 videos
-
Parallel Workers: 4
System Requirements
-
NVIDIA GPU with CUDA support
-
FFmpeg compiled with CUDA hardware acceleration
-
Python 3.7+ (uses standard library only - no pip packages)
-
25GB minimum free disk space
-
Linux OS (tested on Ubuntu)
Verify requirements:
bash scripts/verify_skill.sh
Troubleshooting
Issue: 0% success rate
Diagnosis: HEVC fix not applied Solution: Check scripts/extract_frames_worker.py
- should NOT have -hwaccel_output_format cuda
Issue: Process exits immediately
Diagnosis: Failure in first batch Solution: Check logs in /home/yousuf/PROJECTS/PeopleNet/FrameExtraction/logs/ , identify failed video, investigate
Issue: Videos not found
Diagnosis: Filename pattern mismatch or wrong directory Solution: Verify videos exist in /mnt/windows/Users/yousu/Desktop/CARDV/Movie_F/
Issue: Low disk space error
Diagnosis: Less than 25GB free space Solution: Free up disk space or increase staging cleanup
For complete troubleshooting, see references/CRITICAL_FIXES_CHECKLIST.md
Workflow Summary
-
User places videos in Desktop CARDV/Movie_F folder
-
Agent invokes skill: Runs scripts/run_extraction.sh
-
System identifies new videos via gap analysis
-
System creates batches of 50 videos each
-
System launches 4 parallel GPU workers
-
System monitors progress (updates every 30s)
-
System extracts 3 frames per video
-
Agent reports completion to user
Frame Naming Convention
Frames are named: {video_name}{position}{timestamp}ms.jpg
Example:
20250916042109_062060A_BEGIN_001000ms.jpg 20250916042109_062060A_MIDDLE_030450ms.jpg 20250916042109_062060A_END_059900ms.jpg
Emergency Stop
If extraction needs to be stopped:
Kill all workers
pkill -f extract_frames_worker
Kill coordinator
pkill -f coordinator
Kill monitor
pkill -f monitor
Clean up staging files
rm -rf /home/yousuf/PROJECTS/PeopleNet/Staging/*
Version Information
-
Version: 1.0
-
Category: Movie_F ONLY
-
Status: Production Ready
-
Last Updated: 2025-01-14
-
Tested On: Movie_F (1,426 videos, 85% success rate in initial run)
Future Enhancements
The skill is designed for expansion:
-
Auto-trigger via inotify when videos appear
-
Email notifications on completion
-
Multi-GPU support
-
Retry mechanism for failed videos
-
Frame verification (check for corruption)
Keep all scripts as additional features will be added in the near future.