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

bash
ffmpeg -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

bash
ffmpeg -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.

标签:FFmpeg