Files
platform/seed/skills/ffmpeg/SKILL.md
T
2026-02-16 19:34:35 +00:00

15 KiB

name, description
name description
ffmpeg Process audio and video files using ffmpeg/ffprobe. Use when the user wants to convert, transcode, trim, merge, extract, resize, compress, or analyze multimedia files.

FFmpeg

CLI reference for FFmpeg v8.x — a complete, cross-platform solution for recording, converting, and streaming audio and video.

Official docs: https://www.ffmpeg.org/documentation.html

Tools

Tool Purpose
ffmpeg Transcode, convert, filter, mux/demux multimedia
ffprobe Analyze and inspect multimedia streams
ffplay Play multimedia files (interactive)

ffmpeg

Synopsis

ffmpeg [global_options] {[input_options] -i input_url} ... {[output_options] output_url} ...

Options before -i apply to the input; options before the output URL apply to the output.

Global Options

Flag Description
-y Overwrite output files without asking
-n Do not overwrite; exit if output exists
-hide_banner Suppress copyright/build info banner
-loglevel level Set log level: quiet, error, warning, info (default), verbose, debug
-stats Print encoding progress/statistics
-progress url Send machine-readable progress to url
-report Dump full command line and log to a file
-filter_threads n Number of threads for filter processing

Input/Output Options

Flag Description
-i url Input file URL
-f fmt Force input or output format
-c[:stream] codec Select encoder/decoder; use copy for stream copying
-t duration Limit duration (as input: read limit; as output: write limit)
-to position Stop at position (timestamp)
-ss position Seek to position (before -i: fast input seek; after: output seek)
-sseof position Seek relative to end of file
-itsoffset offset Set input time offset
-itsscale scale Rescale input timestamps
-metadata key=value Set metadata key/value pair
-disposition value Set stream disposition flags
-target type Specify target type: vcd, svcd, dvd, dv, dv50
-stream_loop n Loop input stream n times (-1 = infinite)
-frames[:stream] n Stop after n frames
-fs limit Set file size limit in bytes
-timestamp date Set recording timestamp

Video Options

Flag Description
-vn Disable video
-vcodec codec Set video codec (alias for -c:v)
-r fps Set frame rate
-fpsmax fps Set maximum frame rate
-s WxH Set frame size
-aspect ratio Set display aspect ratio (e.g. 16:9)
-pix_fmt format Set pixel format
-vf filtergraph Apply video filter graph (alias for -filter:v)
-pass n Two-pass encoding pass (1 or 2)
-passlogfile prefix Two-pass log file prefix
-vframes n Set number of video frames to output
-autorotate Auto-rotate based on metadata (default on)
-display_rotation angle Set video rotation metadata
-display_hflip Horizontal flip metadata
-display_vflip Vertical flip metadata
-force_key_frames expr Force keyframes at specified times/expression
-copyinkf Copy non-key frames at the beginning during stream copy

Audio Options

Flag Description
-an Disable audio
-acodec codec Set audio codec (alias for -c:a)
-ar freq Set audio sample rate (Hz)
-ac channels Set number of audio channels
-af filtergraph Apply audio filter graph (alias for -filter:a)
-sample_fmt fmt Set audio sample format
-channel_layout layout Set audio channel layout
-aq q Set audio quality (codec-specific VBR)
-aframes n Set number of audio frames to output

Subtitle Options

Flag Description
-sn Disable subtitles
-scodec codec Set subtitle codec (alias for -c:s)
-fix_sub_duration Fix subtitle durations to avoid overlap

Stream Selection

Flag Description
-map input:stream Manually select streams for output
-dn Disable data streams

Stream specifiers: v (video), V (video, no images), a (audio), s (subtitle), d (data). Index with :N (e.g. a:0 = first audio).

Hardware Acceleration

Flag Description
-hwaccel method HW accel method: cuda, vaapi, qsv, vulkan, auto
-hwaccel_device device Select HW device
-init_hw_device type=name Initialize HW device

ffprobe

Synopsis

ffprobe [options] input_url

Main Options

Flag Description
-show_format Show container format info
-show_streams Show per-stream info
-show_packets Show per-packet info
-show_frames Show per-frame info
-show_chapters Show chapter info
-show_programs Show program info
-show_entries section=key1,key2 Show only specific fields
-show_error Show probe errors
-select_streams specifier Filter to specific streams (e.g. v:0, a)
-count_frames Count frames per stream
-count_packets Count packets per stream
-read_intervals intervals Analyze specific time ranges

Output Formats

Set with -output_format (or -of, -print_format):

Format Description
default [SECTION] key=value [/SECTION]
json JSON output (most useful for parsing)
xml XML output
csv Comma-separated values
flat Flat key=value per line
ini INI-style sections

Display Options

Flag Description
-pretty Human-readable units and time formatting
-unit Show value units
-sexagesimal Format times as HH:MM:SS.us
-hide_banner Suppress copyright/build info
-o output_url Write output to file instead of stdout

Common Codecs

Video Encoders

libx264 (H.264)

Option Description
-preset Speed/quality: ultrafast, superfast, veryfast, faster, fast, medium (default), slow, slower, veryslow
-crf Constant quality: 0 (lossless) to 51 (worst). 18-23 is typical
-profile:v baseline, main, high
-tune film, animation, grain, stillimage, fastdecode, zerolatency
-b:v Target bitrate (e.g. 2M)

libx265 (H.265/HEVC)

Option Description
-preset Same presets as x264
-crf 0-51, default 28. Similar quality to x264 at lower bitrate
-profile:v main, main10, main12
-b:v Target bitrate

libvpx-vp9 (VP9)

Option Description
-crf 0-63. 31 is a good default
-b:v Target bitrate (set to 0 for pure CRF mode)
-cpu-used Speed: 0 (slowest/best) to 8 (fastest)
-deadline best, good (default), realtime
-row-mt 1 Enable row-based multithreading

libsvtav1 (SVT-AV1)

Option Description
-crf 0-63. 30 is a good default
-preset 0 (slowest/best) to 13 (fastest). 8 is a good default
-b:v Target bitrate

libaom-av1 (AOM AV1)

Option Description
-crf 0-63
-cpu-used 0 (best) to 8 (fastest)
-b:v Target bitrate (set to 0 for pure CRF mode)
-tiles Tile columns x rows for parallelism

Audio Encoders

aac (Native AAC)

Option Description
-b:a Bitrate: 128k, 192k, 256k
-profile:a aac_low (default), aac_he, aac_he_v2

libmp3lame (MP3)

Option Description
-b:a CBR bitrate: 128k, 192k, 320k
-q:a VBR quality: 0 (best) to 9 (worst). 2 is a good default

libopus (Opus)

Option Description
-b:a Bitrate: 64k to 256k. 128k is a good default
-vbr on (default), off, constrained
-application audio (default), voip, lowdelay

libvorbis (Vorbis)

Option Description
-q:a VBR quality: -1 to 10. 5 is a good default
-b:a ABR bitrate

flac (FLAC)

Option Description
-compression_level 0 (fast) to 12 (best). 5 is default

Common Container Formats

Format Extensions Notes
mp4 .mp4, .m4a, .m4v Use -movflags +faststart for web streaming
matroska .mkv Supports virtually all codecs
webm .webm VP8/VP9/AV1 + Vorbis/Opus for web
avi .avi Legacy; limited codec support
mpegts .ts Broadcast transport stream
ogg .ogg, .ogv Vorbis/Opus/Theora container
wav .wav Uncompressed PCM audio
flac .flac Lossless audio
mp3 .mp3 MPEG audio layer 3
hls .m3u8 HTTP Live Streaming
dash .mpd DASH adaptive streaming
gif .gif Animated GIF
image2 various Image sequence input/output
concat text file Concatenation demuxer (file list)
null Discard output (benchmarking)

Common Video Filters (-vf)

Filter Description Example
scale=W:H Resize video. Use -1 or -2 to auto-calculate scale=1280:720, scale=-2:480
crop=W:H:X:Y Crop to WxH starting at X,Y crop=640:480:100:50
pad=W:H:X:Y:color Pad video with borders pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black
overlay=X:Y Composite second input over first overlay=10:10
transpose=N Rotate: 0=90ccw+vflip, 1=90cw, 2=90ccw, 3=90cw+vflip transpose=1
hflip / vflip Horizontal / vertical flip hflip
rotate=angle Rotate by arbitrary angle (radians) rotate=PI/4
fps=N Change frame rate fps=30
setpts=expr Modify presentation timestamps setpts=0.5*PTS (2x speed)
trim=start:end Extract time range trim=start=10:end=20
drawtext=opts Overlay text drawtext=text='Hello':fontsize=24:x=10:y=10
fade=t=type:st=S:d=D Fade in/out fade=t=in:st=0:d=2
eq=opts Adjust brightness/contrast/saturation eq=brightness=0.1:contrast=1.2
format=pix_fmt Convert pixel format format=yuv420p
concat=n:v:a Concatenate segments concat=n=2:v=1:a=1
split / select Duplicate / select frames select='eq(pict_type,I)'
deinterlace / yadif Remove interlacing yadif=1
boxblur=R Apply box blur boxblur=5:1
subtitles=file Burn in subtitles from file subtitles=subs.srt
palettegen / paletteuse Generate/apply palette for GIF Used in two-pass GIF creation
colorchannelmixer Mix color channels colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3 (grayscale)

Common Audio Filters (-af)

Filter Description Example
volume=V Adjust volume volume=1.5, volume=-3dB
loudnorm EBU R128 loudness normalization loudnorm=I=-16:TP=-1.5:LRA=11
atempo=T Change tempo (0.5-100.0) atempo=2.0 (2x speed)
aresample=rate Resample audio aresample=44100
amerge Merge audio channels amerge=inputs=2
afade=t=type:st=S:d=D Audio fade in/out afade=t=in:st=0:d=3
highpass=f=freq High-pass filter highpass=f=200
lowpass=f=freq Low-pass filter lowpass=f=3000
equalizer=f:t:w:g Parametric EQ equalizer=f=1000:t=q:w=1:g=5
acompressor Dynamic range compression acompressor=threshold=-20dB:ratio=4
silenceremove Remove silence silenceremove=1:0:-50dB
silencedetect Detect silence silencedetect=n=-30dB:d=2
adelay=delays Delay audio channels adelay=1000|1000 (ms)
aecho=id:ig:delays:decays Add echo effect aecho=0.8:0.88:60:0.4
pan=layout:gains Remix channels pan=mono|c0=0.5*c0+0.5*c1

Common Recipes

Convert format

ffmpeg -i input.mkv output.mp4

Transcode with CRF quality

ffmpeg -i input.mp4 -c:v libx264 -crf 20 -c:a aac -b:a 192k output.mp4

Extract audio

ffmpeg -i video.mp4 -vn -c:a copy audio.m4a

Extract video (no audio)

ffmpeg -i input.mp4 -an -c:v copy output.mp4

Trim / cut

ffmpeg -ss 00:01:30 -to 00:03:00 -i input.mp4 -c copy output.mp4

Resize video

ffmpeg -i input.mp4 -vf "scale=1280:720" -c:a copy output.mp4

Compress video (lower quality)

ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset fast -c:a aac -b:a 128k output.mp4

Two-pass encoding

ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -pass 1 -f null /dev/null
ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -pass 2 output.mp4

Concatenate files (concat demuxer)

# files.txt contains:
# file 'part1.mp4'
# file 'part2.mp4'
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4

Add subtitles (burn-in)

ffmpeg -i input.mp4 -vf "subtitles=subs.srt" output.mp4

Create GIF

ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif

Add watermark / overlay

ffmpeg -i video.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4

Change speed (video + audio)

ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4

Extract frames as images

ffmpeg -i input.mp4 -vf "fps=1" frame_%04d.png

Merge audio and video

ffmpeg -i video.mp4 -i audio.m4a -c:v copy -c:a copy -shortest output.mp4

Normalize audio loudness

ffmpeg -i input.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11" -c:v copy output.mp4

Convert to web-optimized MP4

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -movflags +faststart output.mp4

Probe file info (JSON)

ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

Get duration only

ffprobe -v quiet -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4

Get resolution only

ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4

Source