
Video Frames
- 117 installs
- 416 repo stars
- Updated August 4, 2026
- cowork-os/cowork-os
Extract frames or short clips from videos using ffmpeg.
About
Extracts frames or short clips from video files using ffmpeg. A developer uses it when they need still frames or trimmed clips pulled from a video.
- ffmpeg-based frame and clip extraction
- Executable task focus, not planning or design
Video Frames by the numbers
- 117 all-time installs (skills.sh)
- Ranked #773 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/cowork-os/cowork-os --skill video-framesAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 117 |
|---|---|
| repo stars | ★ 416 |
| Last updated | August 4, 2026 |
| Repository | cowork-os/cowork-os ↗ |
What it does
Extract frames or short clips from videos using ffmpeg.
Files
Video-frames
Purpose
Extract frames or short clips from videos using ffmpeg.
Routing
- Use when: Use when the user asks to extract frames or short clips from videos using ffmpeg.
- Do not use when: Do not use when the request is asking for planning documents, high-level strategy, or non-executable discussion; use the relevant planning or design workflow instead.
- Outputs: Outcome from Video-frames: task-specific result plus concrete action notes.
- Success criteria: Returns concrete actions and decisions matching the requested task, with no fabricated tool-side behavior.
Trigger Examples
Positive
- Use the video-frames skill for this request.
- Help me with video-frames.
- Use when the user asks to extract frames or short clips from videos using ffmpeg.
- Video-frames: provide an actionable result.
Negative
- Do not use when the request is asking for planning documents, high-level strategy, or non-executable discussion; use the relevant planning or design workflow instead.
- Do not use video-frames for unrelated requests.
- This request is outside video-frames scope.
- This is conceptual discussion only; no tool workflow is needed.
Runtime Prompt
- Current runtime prompt length: 462 characters.
- Runtime prompt is defined directly in
../video-frames.json.
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'USAGE'
Usage: frame.sh <video-file> [--time HH:MM:SS[.ms]] [--out output.jpg]
USAGE
}
if [[ $# -lt 1 ]]; then
usage
exit 1
fi
INPUT=""
TIME_AT=""
OUT=""
while [[ $# -gt 0 ]]; do
case "$1" in
--time)
TIME_AT="${2:-}"
shift 2
;;
--out)
OUT="${2:-}"
shift 2
;;
-h|--help)
usage
exit 0
;;
-* )
echo "Unknown flag: $1" >&2
usage
exit 1
;;
*)
if [[ -z "$INPUT" ]]; then
INPUT="$1"
else
echo "Unexpected argument: $1" >&2
usage
exit 1
fi
shift
;;
esac
done
if [[ -z "$INPUT" || ! -f "$INPUT" ]]; then
echo "Input video not found: $INPUT" >&2
exit 1
fi
if [[ -z "$OUT" ]]; then
OUT="${INPUT%.*}-frame.jpg"
fi
if ! command -v ffmpeg >/dev/null 2>&1; then
echo "ffmpeg is required." >&2
exit 1
fi
if [[ -n "$TIME_AT" ]]; then
ffmpeg -hide_banner -loglevel error -y -ss "$TIME_AT" -i "$INPUT" -frames:v 1 "$OUT"
else
ffmpeg -hide_banner -loglevel error -y -i "$INPUT" -frames:v 1 "$OUT"
fi
echo "Wrote frame to: $OUT"
Related skills
Generative Mediaworkflow