FFmpeg Filter is one of the most powerful features in FFmpeg, allowing for various complex processing operations on audio and video.
Filter Basic Syntax
Filter Chain Syntax
bash# Basic format -filter "filter1=param1=value1:param2=value2,filter2=param1=value1" # Complex filter chain -filter_complex "[0:v]scale=1280:720[v];[0:a]volume=0.5[a];[v][a]concat=n=1:v=1:a=1"
Filter Label Explanation
[0:v]: Video stream from input 0[0:a]: Audio stream from input 0[v]: Named output stream;: Separator for different filter chains,: Separator for filters in the same chain
Common Video Filters
Scale Filter
bash# Fixed resolution ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4 # Maintain aspect ratio ffmpeg -i input.mp4 -vf "scale=1280:-1" output.mp4 # Scale by ratio ffmpeg -i input.mp4 -vf "scale=iw/2:ih/2" output.mp4 # Limit maximum size ffmpeg -i input.mp4 -vf "scale='min(1280,iw)':'min(720,ih)'" output.mp4
Crop Filter
bash# Crop center area ffmpeg -i input.mp4 -vf "crop=640:480" output.mp4 # Specify crop position ffmpeg -i input.mp4 -vf "crop=640:480:10:10" output.mp4 # Crop bottom-right corner ffmpeg -i input.mp4 -vf "crop=640:480:in_w-640:in_h-480" output.mp4
Overlay Filter
bash# Overlay image at specified position ffmpeg -i video.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4 # Overlay at bottom-right ffmpeg -i video.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4 # Overlay at center ffmpeg -i video.mp4 -i logo.png -filter_complex "overlay=(W-w)/2:(H-h)/2" output.mp4
Transpose Filter
bash# Rotate 90 degrees clockwise ffmpeg -i input.mp4 -vf "transpose=1" output.mp4 # Rotate 90 degrees counter-clockwise ffmpeg -i input.mp4 -vf "transpose=2" output.mp4 # Rotate 180 degrees ffmpeg -i input.mp4 -vf "transpose=1,transpose=1" output.mp4
Drawtext Filter
bash# Add simple text ffmpeg -i input.mp4 -vf "drawtext=text='Hello World':fontcolor=white:fontsize=24:x=10:y=10" output.mp4 # Add text with shadow ffmpeg -i input.mp4 -vf "drawtext=text='Hello':fontcolor=white:fontsize=32:x=10:y=10:shadowcolor=black:shadowx=2:shadowy=2" output.mp4 # Add dynamic text (timestamp) ffmpeg -i input.mp4 -vf "drawtext=text='%{pts\:hms}':fontcolor=white:fontsize=24:x=10:y=10" output.mp4
Gblur Filter
bash# Gaussian blur ffmpeg -i input.mp4 -vf "gblur=sigma=2" output.mp4 # Strong blur ffmpeg -i input.mp4 -vf "gblur=sigma=5" output.mp4
Unsharp Filter
bash# Sharpen ffmpeg -i input.mp4 -vf "unsharp=5:5:1.0:5:5:0.0" output.mp4 # Slight sharpen ffmpeg -i input.mp4 -vf "unsharp=3:3:0.5:3:3:0.0" output.mp4
Common Audio Filters
Volume Filter
bash# Adjust volume (1.0 is original volume) ffmpeg -i input.mp4 -af "volume=0.5" output.mp4 # Boost volume ffmpeg -i input.mp4 -af "volume=2.0" output.mp4 # Use decibels ffmpeg -i input.mp4 -af "volume=3dB" output.mp4
Afade Filter
bash# Fade in for 3 seconds ffmpeg -i input.mp4 -af "afade=t=in:st=0:d=3" output.mp4 # Fade out for 3 seconds ffmpeg -i input.mp4 -af "afade=t=out:st=5:d=3" output.mp4
Amix Filter
bash# Mix two audio tracks ffmpeg -i audio1.mp3 -i audio2.mp3 -filter_complex "amix=inputs=2:duration=first" output.mp3 # Mix three audio tracks ffmpeg -i audio1.mp3 -i audio2.mp3 -i audio3.mp3 -filter_complex "amix=inputs=3:duration=longest" output.mp3
Adelay Filter
bash# Delay audio by 500 milliseconds ffmpeg -i input.mp4 -af "adelay=500|500" output.mp4 # Different delay for left and right channels ffmpeg -i input.mp4 -af "adelay=500|1000" output.mp4
Complex Filter Examples
Picture-in-Picture Effect
bashffmpeg -i main.mp4 -i pip.mp4 -filter_complex \ "[1:v]scale=320:240[pip];[0:v][pip]overlay=10:10" \ output.mp4
Multi-Screen Splicing
bashffmpeg -i video1.mp4 -i video2.mp4 -i video3.mp4 -i video4.mp4 \ -filter_complex \ "[0:v]scale=640:360[v0];[1:v]scale=640:360[v1];[2:v]scale=640:360[v2];[3:v]scale=640:360[v3]; \ [v0][v1]hstack[top];[v2][v3]hstack[bottom];[top][bottom]vstack" \ output.mp4
Video Speed Up/Down
bash# Speed up 2x ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4 # Slow down 0.5x ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" output.mp4
Filter Performance Optimization
Use Hardware Acceleration
bash# Use GPU accelerated filter ffmpeg -hwaccel cuda -i input.mp4 -vf "scale_npp=1280:720" output.mp4
Preprocessing Optimization
bash# Crop first then scale (reduce processing pixels) ffmpeg -i input.mp4 -vf "crop=640:480,scale=320:240" output.mp4
Filter is one of the most powerful features of FFmpeg. Mastering the use of filters allows for fine-grained control over audio and video.