Install
$ agentstack add skill-ramonclaudio-skills-frames ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Video to Frames
ultrathink
Claude cannot view video files directly but can view images. Extract frames using ffmpeg, then read a sample. Claude supports up to 600 images per request with the 1M context window, so sampling can be generous.
Environment
- ffmpeg: !
which ffmpeg 2>/dev/null && ffmpeg -version 2>&1 | head -1 || echo "NOT INSTALLED - run: brew install ffmpeg"
If ffmpeg is NOT INSTALLED, stop immediately and tell the user to install it. Do not attempt any extraction.
Workflow
Parse the video path from $ARGUMENTS.
Step 1: Copy + Probe
File paths with spaces and special characters break quoting. Copy to a clean /tmp path using glob on a unique substring (timestamp, keyword).
/bin/cp -f /path/to/dir/*UNIQUE_PART* /tmp/video.mov && \
ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,duration -of csv=p=0 /tmp/video.mov
Example for Screen Recording 2026-01-10 at 11.33.27 AM.mov:
/bin/cp -f ~/Desktop/Screen*11.33.27* /tmp/video.mov && \
ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,duration -of csv=p=0 /tmp/video.mov
Step 2: Extract frames
Select FPS based on duration from the probe output. Scale to 640px width to save context tokens.
| Duration | FPS | Rationale | |----------|-----|-----------| | 2min | 0.5 | Keep frame count manageable |
trash /tmp/video-frames 2>/dev/null; mkdir -p /tmp/video-frames && \
ffmpeg -y -v warning -i /tmp/video.mov -vf "fps=FPS,scale=640:-1" /tmp/video-frames/frame_%04d.png && \
/bin/ls /tmp/video-frames/ | wc -l
For short videos (300 | 50-60 evenly distributed |
Pick frame numbers evenly spaced across the total. Read them with the Read tool, multiple per response.
Why the Copy Pattern?
| Problem | Solution | |---------|----------| | Spaces in filenames | /bin/cp -f with glob handles any filename | | Quoted paths fail | Glob avoids quoting issues | | cd fails (zoxide) | Never use cd, use absolute paths | | Shell aliases interfere | Use /bin/cp, /bin/ls for reliability |
Gotchas
scale=640:-1fails on videos with odd-height dimensions. Usescale=640:-2if ffmpeg errors with "height not divisible by 2".- HDR screen recordings (common on Apple XDR displays) produce washed-out frames. Check
color_transfer=smpte2084in probe output and tone-map to SDR first withavconvert. - Long videos at native FPS can dump thousands of PNGs and eat gigabytes of
/tmpdisk. Always check duration before extracting and pick a conservative FPS. - If ffprobe returns no duration (e.g., some
.webmor piped streams), the FPS table breaks. Fall back to 1 FPS and count frames after extraction. - Glob-based copy (
/bin/cp -f *UNIQUE*) matches multiple files if the substring isn't unique. Verify only one file matches before proceeding.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ramonclaudio
- Source: ramonclaudio/skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.