Ai-workflow media-processing
Video/audio/image processing with FFmpeg and ImageMagick. Tools: FFmpeg (video/audio), ImageMagick (images). Capabilities: format conversion, encoding (H.264/H.265/VP9/AV1), streaming (HLS/DASH), filters, effects, thumbnails, watermarks, batch processing, hardware acceleration (NVENC/QSV). Actions: convert, encode, resize, crop, compress, extract, merge, stream, transcode media. Keywords: FFmpeg, ImageMagick, video encoding, audio extraction, image resize, thumbnail, watermark, HLS, DASH, H.264, H.265, VP9, AV1, codec, bitrate, framerate, resolution, aspect ratio, filter, overlay, concat, trim, fade, batch processing. Use when: converting video/audio formats, encoding with specific codecs, generating thumbnails, creating streaming manifests, extracting audio from video, batch processing images, adding watermarks, optimizing file sizes.
git clone https://github.com/nicepkg/ai-workflow
T=$(mktemp -d) && git clone --depth=1 https://github.com/nicepkg/ai-workflow "$T" && mkdir -p ~/.claude/skills && cp -r "$T/workflows/video-creator-workflow/.claude/skills/media-processing" ~/.claude/skills/nicepkg-ai-workflow-media-processing && rm -rf "$T"
workflows/video-creator-workflow/.claude/skills/media-processing/SKILL.mdMedia Processing Skill
Process video, audio, and images using FFmpeg and ImageMagick command-line tools for conversion, optimization, streaming, and manipulation tasks.
When to Use This Skill
Use when:
- Converting media formats (video, audio, images)
- Encoding video with codecs (H.264, H.265, VP9, AV1)
- Processing images (resize, crop, effects, watermarks)
- Extracting audio from video
- Creating streaming manifests (HLS/DASH)
- Generating thumbnails and previews
- Batch processing media files
- Optimizing file sizes and quality
- Applying filters and effects
- Creating composite images or videos
Tool Selection Guide
FFmpeg: Video/Audio Processing
Use FFmpeg for:
- Video encoding, conversion, transcoding
- Audio extraction, conversion, mixing
- Live streaming (RTMP, HLS, DASH)
- Video filters (scale, crop, rotate, overlay)
- Hardware-accelerated encoding
- Media file inspection (ffprobe)
- Frame extraction, concatenation
- Codec selection and optimization
ImageMagick: Image Processing
Use ImageMagick for:
- Image format conversion (PNG, JPEG, WebP, GIF)
- Resizing, cropping, transformations
- Batch image processing (mogrify)
- Visual effects (blur, sharpen, sepia)
- Text overlays and watermarks
- Image composition and montages
- Color adjustments, filters
- Thumbnail generation
Decision Matrix
| Task | Tool | Why |
|---|---|---|
| Video encoding | FFmpeg | Native video codec support |
| Audio extraction | FFmpeg | Direct stream manipulation |
| Image resize | ImageMagick | Optimized for still images |
| Batch images | ImageMagick | mogrify for in-place edits |
| Video thumbnails | FFmpeg | Frame extraction built-in |
| GIF creation | FFmpeg or ImageMagick | FFmpeg for video source, ImageMagick for images |
| Streaming | FFmpeg | Live streaming protocols |
| Image effects | ImageMagick | Rich filter library |
Installation
macOS
brew install ffmpeg imagemagick
Ubuntu/Debian
sudo apt-get install ffmpeg imagemagick
Windows
# Using winget winget install ffmpeg winget install ImageMagick.ImageMagick # Or download binaries # FFmpeg: https://ffmpeg.org/download.html # ImageMagick: https://imagemagick.org/script/download.php
Verify Installation
ffmpeg -version ffprobe -version magick -version # or convert -version
Quick Start Examples
Video Conversion
# Convert format (copy streams, fast) ffmpeg -i input.mkv -c copy output.mp4 # Re-encode with H.264 ffmpeg -i input.avi -c:v libx264 -crf 22 -c:a aac output.mp4 # Resize video to 720p ffmpeg -i input.mp4 -vf scale=-1:720 -c:a copy output.mp4
Audio Extraction
# Extract audio (no re-encoding) ffmpeg -i video.mp4 -vn -c:a copy audio.m4a # Convert to MP3 ffmpeg -i video.mp4 -vn -q:a 0 audio.mp3
Image Processing
# Convert format magick input.png output.jpg # Resize maintaining aspect ratio magick input.jpg -resize 800x600 output.jpg # Create square thumbnail magick input.jpg -resize 200x200^ -gravity center -extent 200x200 thumb.jpg
Batch Image Resize
# Resize all JPEGs to 800px width mogrify -resize 800x -quality 85 *.jpg # Output to separate directory mogrify -path ./output -resize 800x600 *.jpg
Video Thumbnail
# Extract frame at 5 seconds ffmpeg -ss 00:00:05 -i video.mp4 -vframes 1 -vf scale=320:-1 thumb.jpg
HLS Streaming
# Generate HLS playlist ffmpeg -i input.mp4 \ -c:v libx264 -preset fast -crf 22 -g 48 \ -c:a aac -b:a 128k \ -f hls -hls_time 6 -hls_playlist_type vod \ playlist.m3u8
Image Watermark
# Add watermark to corner magick input.jpg watermark.png -gravity southeast \ -geometry +10+10 -composite output.jpg
Common Workflows
Optimize Video for Web
# H.264 with good compression ffmpeg -i input.mp4 \ -c:v libx264 -preset slow -crf 23 \ -c:a aac -b:a 128k \ -movflags +faststart \ output.mp4
Create Responsive Images
# Generate multiple sizes for size in 320 640 1024 1920; do magick input.jpg -resize ${size}x -quality 85 "output-${size}w.jpg" done
Extract Video Segment
# From 1:30 to 3:00 (re-encode for precision) ffmpeg -i input.mp4 -ss 00:01:30 -to 00:03:00 \ -c:v libx264 -c:a aac output.mp4
Batch Image Optimization
# Convert PNG to optimized JPEG mogrify -path ./optimized -format jpg -quality 85 -strip *.png
Video GIF Creation
# High quality GIF with palette ffmpeg -i input.mp4 -vf "fps=15,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
Image Blur Effect
# Gaussian blur magick input.jpg -gaussian-blur 0x8 output.jpg
Advanced Techniques
Multi-Pass Video Encoding
# Pass 1 (analysis) ffmpeg -y -i input.mkv -c:v libx264 -b:v 2600k -pass 1 -an -f null /dev/null # Pass 2 (encoding) ffmpeg -i input.mkv -c:v libx264 -b:v 2600k -pass 2 -c:a aac output.mp4
Hardware-Accelerated Encoding
# NVIDIA NVENC ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc -preset fast -crf 22 output.mp4 # Intel QuickSync ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -c:v h264_qsv output.mp4
Complex Image Pipeline
# Resize, crop, border, adjust magick input.jpg \ -resize 1000x1000^ \ -gravity center \ -crop 1000x1000+0+0 +repage \ -bordercolor black -border 5x5 \ -brightness-contrast 5x10 \ -quality 90 \ output.jpg
Video Filter Chains
# Scale, denoise, watermark ffmpeg -i video.mp4 -i logo.png \ -filter_complex "[0:v]scale=1280:720,hqdn3d[v];[v][1:v]overlay=10:10" \ -c:a copy output.mp4
Animated GIF from Images
# Create with delay magick -delay 100 -loop 0 frame*.png animated.gif # Optimize size magick animated.gif -fuzz 5% -layers Optimize optimized.gif
Media Analysis
Inspect Video Properties
# Detailed JSON output ffprobe -v quiet -print_format json -show_format -show_streams input.mp4 # Get resolution ffprobe -v error -select_streams v:0 \ -show_entries stream=width,height \ -of csv=s=x:p=0 input.mp4
Image Information
# Basic info identify image.jpg # Detailed format identify -verbose image.jpg # Custom format identify -format "%f: %wx%h %b\n" image.jpg
Performance Tips
- Use CRF for quality control - Better than bitrate for video
- Copy streams when possible - Avoid re-encoding with
-c copy - Hardware acceleration - GPU encoding 5-10x faster
- Appropriate presets - Balance speed vs compression
- Batch with mogrify - In-place image processing
- Strip metadata - Reduce file size with
-strip - Progressive JPEG - Better web loading with
-interlace Plane - Limit memory - Prevent crashes on large batches
- Test on samples - Verify settings before batch
- Parallel processing - Use GNU Parallel for multiple files
Reference Documentation
Detailed guides in
references/:
- ffmpeg-encoding.md - Video/audio codecs, quality optimization, hardware acceleration
- ffmpeg-streaming.md - HLS/DASH, live streaming, adaptive bitrate
- ffmpeg-filters.md - Video/audio filters, complex filtergraphs
- imagemagick-editing.md - Format conversion, effects, transformations
- imagemagick-batch.md - Batch processing, mogrify, parallel operations
- format-compatibility.md - Format support, codec recommendations
Common Parameters
FFmpeg Video
- Video codec (libx264, libx265, libvpx-vp9)-c:v
- Quality (0-51, lower=better, 23=default)-crf
- Speed/compression (ultrafast to veryslow)-preset
- Video bitrate (e.g., 2M, 2500k)-b:v
- Video filters-vf
FFmpeg Audio
- Audio codec (aac, mp3, opus)-c:a
- Audio bitrate (e.g., 128k, 192k)-b:a
- Sample rate (44100, 48000)-ar
ImageMagick Geometry
- Fit within (maintains aspect)800x600
- Force exact size800x600!
- Fill (may crop)800x600^
- Width only800x
- Height onlyx600
- Scale percentage50%
Troubleshooting
FFmpeg "Unknown encoder"
# Check available encoders ffmpeg -encoders | grep h264 # Install codec libraries sudo apt-get install libx264-dev libx265-dev
ImageMagick "not authorized"
# Edit policy file sudo nano /etc/ImageMagick-7/policy.xml # Change <policy domain="coder" rights="none" pattern="PDF" /> # to <policy domain="coder" rights="read|write" pattern="PDF" />
Memory errors
# Limit memory usage ffmpeg -threads 4 input.mp4 output.mp4 magick -limit memory 2GB -limit map 4GB input.jpg output.jpg
Resources
- FFmpeg: https://ffmpeg.org/documentation.html
- FFmpeg Wiki: https://trac.ffmpeg.org/
- ImageMagick: https://imagemagick.org/
- ImageMagick Usage: https://imagemagick.org/Usage/