6月4日 13:52
How to use FFmpeg Filter? What are the common video and audio filters?
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.