From claude-content
Compresses videos using FFmpeg: CRF mode for quality preservation or 2-pass for target size limits. Chooses H.264/H.265 codecs, probes input with ffprobe, calculates bitrates via Python, confirms with user.
npx claudepluginhub gupsammy/claudest --plugin claude-contentThis skill is limited to using the following tools:
Compress a video using quality-based (CRF) or size-based (2-pass) encoding.
FFmpeg CLI reference for video/audio processing: format conversion, resizing/cropping/trimming, audio mixing/extraction, overlays/text/subtitles, GIFs/thumbnails, GPU encoding, ffprobe inspection.
Provides FFmpeg commands for video/audio post-production: conversion, scaling, compression, trimming, concatenation, AI post-processing. Excludes audio mixing and Remotion rendering.
Compresses videos using FFmpeg CRF mode and trims silent/static segments for screen recordings and lectures. Auto-detects hardware for optimal encoding like VideoToolbox on Apple Silicon.
Share bugs, ideas, or general feedback.
Compress a video using quality-based (CRF) or size-based (2-pass) encoding.
If the user did not provide a file path, ask for it with AskUserQuestion before proceeding.
ffprobe -v quiet -print_format json -show_streams -show_format "$INPUT"
Extract: duration (seconds), file size (bytes), existing video codec, audio bitrate. If ffprobe fails (file not found, not a valid video), report the error and stop — do not attempt encoding.
H.264 is the safe default: universally device-compatible and fast to encode. Use H.265 only when the size reduction justifies the slower encode time and narrower device support.
CRF mode:
ffmpeg -i "$INPUT" -c:v libx264 -crf 23 -c:a copy -movflags +faststart "$OUTPUT"
# CRF scale: 18=near-lossless, 23=default quality, 28=aggressive (visible loss)
# -movflags +faststart moves moov atom to front — enables progressive web playback
2-pass mode — calculate video bitrate first:
python3 ${CLAUDE_PLUGIN_ROOT}/skills/compress-video/scripts/calc_bitrate.py "$INPUT" --target-mb "$TARGET_MB"
# Outputs: VIDEO_BITRATE_KBPS (integer)
# Formula: (target_mb * 8192 / duration_s) - audio_bitrate_kbps
# Typical audio budget: 128 kbps
# Exit 1 = target too small (bitrate would go negative); report the error and ask for a larger target before retrying.
# Pass 1 — video analysis only, no output file:
ffmpeg -y -i "$INPUT" -c:v libx264 -b:v ${VIDEO_BITRATE_KBPS}k -pass 1 -an -f null /dev/null
# Pass 2 — final encode with audio:
ffmpeg -i "$INPUT" -c:v libx264 -b:v ${VIDEO_BITRATE_KBPS}k -pass 2 \
-c:a aac -b:a 128k -movflags +faststart "$OUTPUT"
Show: input file size, chosen codec, mode (CRF value or calculated bitrate), output path. Wait for approval before running.
After completion: input size → output size, compression ratio (e.g., "73.2 MB → 18.4 MB, 75% reduction").
-c:a copy to preserve audio losslessly. In 2-pass mode, audio must be re-encoded (AAC 128k) because pass 1 is video-only — no audio stream is processed.convert-video with -c copy instead — instant and lossless.libx265 and add -tag:v hvc1 for Apple device compatibility.ffmpeg2pass-0.log and ffmpeg2pass-0.log.mbtree after 2-pass encoding completes.