
FFmpeg
- 8 installs
- 33 repo stars
- Updated April 26, 2026
- bighardperson/computer-science-skills-collection
ffmpeg is a skill that guides video and audio processing with FFmpeg through correct codec selection, filtering, and encoding settings.
About
ffmpeg is a reference skill for processing video and audio with FFmpeg using correct codec selection, filtering, and encoding settings. A developer uses it to pick CRF and preset values, map streams, apply filters, concatenate clips, burn or mux subtitles, and choose hardware acceleration. It also lists common FFmpeg mistakes to avoid.
- Reference for FFmpeg codec, container, and encoding choices
- Covers seeking, stream mapping, filters, concat, subtitles, and hardware acceleration
- Lists common FFmpeg mistakes like re-encoding when -c copy was intended
FFmpeg by the numbers
- 8 all-time installs (skills.sh)
- Ranked #1,074 of 1,337 Generative Media skills by installs in the Skillselion catalog
- Data as of Jul 30, 2026 (Skillselion catalog sync)
FFmpeg capabilities & compatibility
Free; only needs the ffmpeg binary installed locally.
- Capabilities
- video transcode · audio process · subtitle mux
- Use cases
- video generation
- Platforms
- Linux · macOS · Windows
- Pricing
- Free
What FFmpeg says it does
Process video and audio with correct codec selection, filtering, and encoding settings.
CRF (Constant Rate Factor): lower = better quality, larger file—18-23 typical for H.264
npx skills add https://github.com/bighardperson/computer-science-skills-collection --skill ffmpegAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 8 |
|---|---|
| repo stars | ★ 33 |
| Last updated | April 26, 2026 |
| Repository | bighardperson/computer-science-skills-collection ↗ |
What it does
Process video and audio with FFmpeg using correct codec, container, filter, and encoding settings.
Who is it for?
Getting FFmpeg codec, filter, and encoding flags right for video and audio jobs.
Skip if: Generating new media from prompts or non-FFmpeg pipelines.
When should I use this skill?
The user needs to transcode, trim, filter, concatenate, or subtitle video or audio with FFmpeg.
What you get
- Correct FFmpeg command lines for transcoding, trimming, filtering, and muxing
By the numbers
- 11 topic sections from input seeking to common mistakes
- CRF range 18-23 typical for H.264
Files
Input Seeking (Major Difference)
-ssBEFORE-i: fast seek, may be inaccurate—starts from nearest keyframe-ssAFTER-i: frame-accurate but slow—decodes from start- Combine both:
-ss 00:30:00 -i input.mp4 -ss 00:00:05—fast seek then accurate trim - For cutting, add
-avoid_negative_ts make_zeroto fix timestamp issues
Stream Selection
- Default: first video + first audio—may not be what you want
- Explicit selection:
-map 0:v:0 -map 0:a:1—first video, second audio - All streams of type:
-map 0:a—all audio streams - Copy specific:
-map 0 -c copy—all streams, no re-encoding - Exclude:
-map 0 -map -0:s—all except subtitles
Encoding Quality
- CRF (Constant Rate Factor): lower = better quality, larger file—18-23 typical for H.264
-preset: ultrafast to veryslow—slower = smaller file at same quality- Two-pass for target bitrate: first pass analyzes, second pass encodes
-crfand-b:vmutually exclusive—use one or the other
Container vs Codec
- Container (MP4, MKV, WebM): wrapper format holding streams
- Codec (H.264, VP9, AAC): compression algorithm for stream
- Not all codecs fit all containers—H.264 in MP4/MKV, not WebM; VP9 in WebM/MKV, not MP4
- Copy codec to new container:
-c copy—fast, no quality loss
Filter Syntax
- Simple:
-vf "scale=1280:720"—single filter chain - Complex:
-filter_complex "[0:v]scale=1280:720[scaled]"—named outputs for routing - Chain filters:
-vf "scale=1280:720,fps=30"—comma-separated - Filter order matters—scale before crop gives different result than crop before scale
Common Filters
- Scale:
scale=1280:720orscale=-1:720for auto-width maintaining aspect - Crop:
crop=640:480:100:50—width:height:x:y from top-left - FPS:
fps=30—change framerate - Trim:
trim=start=10:end=20,setpts=PTS-STARTPTS—setpts resets timestamps - Overlay:
overlay=10:10—position from top-left
Audio Processing
- Sample rate:
-ar 48000—standard for video - Channels:
-ac 2—stereo - Audio codec:
-c:a aac -b:a 192k—AAC at 192kbps - Normalize:
-filter:a loudnorm—EBU R128 loudness normalization - Extract audio:
-vn -c:a copy output.m4a—no video, copy audio
Concatenation
- Same codec/params: concat demuxer—
-f concat -safe 0 -i list.txt -c copy - Different formats: concat filter—
-filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1" - list.txt format:
file 'video1.mp4'per line—escape special characters - Different resolutions: scale/pad to match before concat filter
Subtitles
- Burn-in (hardcode):
-vf "subtitles=subs.srt"—cannot be turned off - Mux as stream:
-c:s mov_text(MP4) or-c:s srt(MKV)—user toggleable - From input:
-map 0:s—include subtitle streams - Extract:
-map 0:s:0 subs.srt—first subtitle to file
Hardware Acceleration
- Decode:
-hwaccel cudaor-hwaccel videotoolbox(macOS) - Encode:
-c:v h264_nvenc(NVIDIA),-c:v h264_videotoolbox(macOS) - Not always faster—setup overhead; benefits show on long videos
- Quality may differ—software encoding often produces better quality
Common Mistakes
- Forgetting
-c copywhen not re-encoding—defaults to re-encode, slow and lossy -ssafter-ifor long videos—takes forever seeking- Audio desync after cutting—use
-async 1or-af aresample=async=1 - Filter on stream copy—filters require re-encoding;
-c copy+-vf= error - Output extension doesn't set codec—
output.mp4without-c:vuses default, may not be H.264
{
"ownerId": "kn73vp5rarc3b14rc7wjcw8f8580t5d1",
"slug": "ffmpeg",
"version": "1.0.0",
"publishedAt": 1770692193667
}{
"version": 1,
"registry": "https://clawhub.ai",
"slug": "ffmpeg",
"installedVersion": "1.0.0",
"installedAt": 1776070323810
}
Related skills
FAQ
Why is my ffmpeg cut slow?
Putting -ss after -i is frame-accurate but decodes from the start; put -ss before -i for a fast seek from the nearest keyframe.
How do I avoid re-encoding in ffmpeg?
Use -c copy to copy streams into a new container without re-encoding; forgetting it defaults to a slow, lossy re-encode.