乐闻世界logo
搜索文章和话题

How to use FFmpeg Filter? What are the common video and audio filters?

2月18日 11:08

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