Initial commit: antigravity-claudekit
This commit is contained in:
153
skills/ck-media-processing/SKILL.md
Normal file
153
skills/ck-media-processing/SKILL.md
Normal file
@@ -0,0 +1,153 @@
|
||||
---
|
||||
name: ck-media-processing
|
||||
description: >
|
||||
Processes audio, video, and images using FFmpeg and ImageMagick pipelines.
|
||||
Activate when user says 'convert video', 'compress image', 'extract audio',
|
||||
'resize images in bulk', 'transcode media', or 'process video file'.
|
||||
Accepts file paths, format targets, quality settings, and filter specifications.
|
||||
---
|
||||
|
||||
## Overview
|
||||
Builds and executes FFmpeg and ImageMagick commands for media conversion, compression, resizing, format conversion, and pipeline processing of audio, video, and image files.
|
||||
|
||||
## When to Use
|
||||
- Converting between video/audio formats (MP4, WebM, MOV, MP3, AAC, etc.)
|
||||
- Compressing or optimizing media files for web delivery
|
||||
- Bulk resizing, cropping, or converting images
|
||||
- Extracting audio tracks or video frames
|
||||
- Applying filters, watermarks, or overlays to media
|
||||
- Generating thumbnails or animated GIFs from video
|
||||
|
||||
## Don't Use When
|
||||
- AI-based image generation is needed (use ck-ai-artist)
|
||||
- Video needs programmatic composition with React components (use ck-remotion)
|
||||
- Media editing requires a GUI (recommend appropriate desktop software)
|
||||
- File is DRM-protected content
|
||||
|
||||
## Steps / Instructions
|
||||
|
||||
### 1. Identify Task and Tools
|
||||
|
||||
| Task | Tool |
|
||||
|------|------|
|
||||
| Video conversion/compression | FFmpeg |
|
||||
| Audio extraction/conversion | FFmpeg |
|
||||
| Image resize/crop/convert | ImageMagick (`convert`) or FFmpeg |
|
||||
| Bulk image processing | ImageMagick + shell loop |
|
||||
| Thumbnails from video | FFmpeg |
|
||||
| GIF from video clip | FFmpeg |
|
||||
|
||||
### 2. FFmpeg — Common Operations
|
||||
|
||||
**Convert video format:**
|
||||
```bash
|
||||
ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac output.mp4
|
||||
```
|
||||
|
||||
**Compress video (reduce file size):**
|
||||
```bash
|
||||
# CRF 18-28: lower = better quality, larger file
|
||||
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset slow -c:a aac -b:a 128k output-compressed.mp4
|
||||
```
|
||||
|
||||
**Extract audio:**
|
||||
```bash
|
||||
ffmpeg -i video.mp4 -vn -c:a libmp3lame -q:a 2 audio.mp3
|
||||
```
|
||||
|
||||
**Trim video clip:**
|
||||
```bash
|
||||
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:02:45 -c copy clip.mp4
|
||||
```
|
||||
|
||||
**Extract frames as images:**
|
||||
```bash
|
||||
# 1 frame per second
|
||||
ffmpeg -i video.mp4 -vf fps=1 frames/frame_%04d.png
|
||||
|
||||
# Specific frame at timestamp
|
||||
ffmpeg -i video.mp4 -ss 00:00:05 -vframes 1 thumbnail.png
|
||||
```
|
||||
|
||||
**Create GIF from video:**
|
||||
```bash
|
||||
ffmpeg -i input.mp4 -ss 0 -t 5 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
|
||||
```
|
||||
|
||||
**WebM for web (VP9):**
|
||||
```bash
|
||||
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
|
||||
```
|
||||
|
||||
### 3. ImageMagick — Common Operations
|
||||
|
||||
**Resize image:**
|
||||
```bash
|
||||
convert input.jpg -resize 800x600 output.jpg
|
||||
# Preserve aspect ratio (fit within box):
|
||||
convert input.jpg -resize 800x600\> output.jpg
|
||||
```
|
||||
|
||||
**Convert format:**
|
||||
```bash
|
||||
convert input.png output.webp
|
||||
convert input.bmp output.jpg
|
||||
```
|
||||
|
||||
**Compress JPEG:**
|
||||
```bash
|
||||
convert input.jpg -quality 80 output.jpg
|
||||
```
|
||||
|
||||
**Bulk resize (all PNGs in directory):**
|
||||
```bash
|
||||
for f in *.png; do
|
||||
convert "$f" -resize 1920x1080\> "resized_$f"
|
||||
done
|
||||
```
|
||||
|
||||
**Add watermark:**
|
||||
```bash
|
||||
convert input.jpg -gravity SouthEast \
|
||||
\( watermark.png -resize 200x200 \) \
|
||||
-composite output.jpg
|
||||
```
|
||||
|
||||
**Crop to specific region:**
|
||||
```bash
|
||||
# WxH+X+Y
|
||||
convert input.jpg -crop 400x300+100+50 cropped.jpg
|
||||
```
|
||||
|
||||
### 4. Check Output Quality
|
||||
|
||||
After processing:
|
||||
```bash
|
||||
# Inspect video metadata
|
||||
ffprobe -v quiet -print_format json -show_streams output.mp4
|
||||
|
||||
# Check image info
|
||||
identify -verbose output.jpg | grep -E "Geometry|Format|Quality|Filesize"
|
||||
```
|
||||
|
||||
### 5. Batch Processing Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
INPUT_DIR="./raw"
|
||||
OUTPUT_DIR="./processed"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
for f in "$INPUT_DIR"/*.mp4; do
|
||||
name=$(basename "$f" .mp4)
|
||||
ffmpeg -i "$f" -c:v libx264 -crf 26 -c:a aac \
|
||||
"$OUTPUT_DIR/${name}-compressed.mp4"
|
||||
done
|
||||
```
|
||||
|
||||
## Notes
|
||||
- Always test on a single file before batch processing
|
||||
- Keep originals — never overwrite input files in place
|
||||
- FFmpeg `-c copy` is lossless stream copy (fastest, no re-encode)
|
||||
- Use `-y` flag to overwrite output without prompting in scripts
|
||||
- Check available encoders: `ffmpeg -encoders | grep -E "video|audio"`
|
||||
Reference in New Issue
Block a user