← GPT-AI-VIDEO
DOCUMENT · 4.6 KB

vendor/OpenMontage/.agents/skills/ffmpeg/reference.md

Workspace snapshot · 09/04 14:52

FFmpeg Reference

Filter Syntax

Video Filters (-vf)

# Chain filters with comma
-vf "scale=1920:1080,fps=30,crop=1280:720"

# Complex filters with labels
-filter_complex "[0:v]scale=1920:1080[scaled];[scaled]fps=30[out]" -map "[out]"

Common Video Filters

FilterSyntaxExample
scalescale=w:hscale=1920:1080 or scale=1280:-1 (auto height)
cropcrop=w:h:x:ycrop=1280:720:320:180
fpsfps=Nfps=30
padpad=w:h:x:y:colorpad=1920:1080:(ow-iw)/2:(oh-ih)/2:black
fadefade=t=in/out:st=N:d=Nfade=t=in:st=0:d=1
setptssetpts=N*PTSsetpts=0.5*PTS (2x speed)
drawtextdrawtext=text='Hi':fontsize=24Add text overlay
overlayoverlay=x:yCombine videos

Common Audio Filters (-af)

FilterSyntaxExample
volumevolume=Nvolume=1.5 or volume=0.5
afadeafade=t=in/out:st=N:d=Nafade=t=in:st=0:d=1
atempoatempo=Natempo=2.0 (2x speed, range 0.5-2.0)
loudnormloudnormNormalize audio levels

Codec Options

Video Codecs (-c:v)

CodecUse CaseNotes
libx264Universal H.264Best compatibility
libx265H.265/HEVCBetter compression, less compatible
libvpx-vp9WebMGood for web
proresProResProfessional editing
copyStream copyNo re-encoding, fastest

Audio Codecs (-c:a)

CodecUse CaseNotes
aacMP4 containerMost compatible
libmp3lameMP3Universal
libvorbisWebM/OGGOpen source
pcm_s16leWAVUncompressed
copyStream copyNo re-encoding

Quality Settings

CRF (Constant Rate Factor) for x264/x265

CRFQualityUse Case
0LosslessArchive
17-18Visually losslessMaster
19-22High qualityProduction
23DefaultGeneral use
24-27MediumWeb delivery
28+LowPreview/draft

Presets (-preset)

Faster presets = larger files, quicker encoding

ultrafast → superfast → veryfast → faster → fast → medium → slow → slower → veryslow

Container Formats

FormatExtensionBest For
MP4.mp4Universal, web, mobile
MOV.movApple ecosystem, ProRes
WebM.webmWeb (VP9)
MKV.mkvArchive, multiple streams
GIF.gifShort animations (no audio)

Input/Output Options

Input Options (before -i)

OptionPurposeExample
-ssSeek to time-ss 00:01:30
-tDuration limit-t 00:00:30
-rInput framerate-r 30
-fForce format-f gif

Output Options (after -i)

OptionPurposeExample
-yOverwrite output-y
-nNever overwrite-n
-movflags faststartWeb streaming-movflags faststart
-pix_fmtPixel format-pix_fmt yuv420p
-anNo audio-an
-vnNo video-vn

Useful Patterns

Get Duration in Seconds

ffprobe -v error -show_entries format=duration -of csv=p=0 input.mp4

Get Resolution

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

Get Frame Count

ffprobe -v error -select_streams v:0 -count_frames -show_entries stream=nb_read_frames -of csv=p=0 input.mp4

Create Thumbnail

# At specific time
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 thumbnail.jpg

# Best quality
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 -q:v 2 thumbnail.jpg

Create GIF from Video

# Simple (large file)
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1" output.gif

# With palette (better quality, smaller)
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif

Picture-in-Picture

# Overlay small video in corner
ffmpeg -i main.mp4 -i overlay.mp4 \
  -filter_complex "[1:v]scale=320:-1[pip];[0:v][pip]overlay=W-w-20:H-h-20" \
  -c:a copy output.mp4

Side-by-Side Videos

ffmpeg -i left.mp4 -i right.mp4 \
  -filter_complex "[0:v][1:v]hstack=inputs=2[v]" \
  -map "[v]" -c:v libx264 output.mp4

Remotion Integration Notes

  • Remotion uses <OffthreadVideo> which handles most formats
  • Prefer H.264 (libx264) in MP4 container
  • Always use -movflags faststart for web playback
  • Match fps to composition (usually 30fps)
  • Resolution should match composition (1920x1080 typical)