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

FFmpeg Filter 如何使用?常用的视频和音频滤镜有哪些?

2月18日 11:08

FFmpeg Filter(滤镜)是 FFmpeg 中最强大的功能之一,可以对音视频进行各种复杂的处理操作。

Filter 基本语法

Filter 链语法

bash
# 基本格式 -filter "filter1=param1=value1:param2=value2,filter2=param1=value1" # 复杂 filter 链 -filter_complex "[0:v]scale=1280:720[v];[0:a]volume=0.5[a];[v][a]concat=n=1:v=1:a=1"

Filter 标记说明

  • [0:v]:输入 0 的视频流
  • [0:a]:输入 0 的音频流
  • [v]:命名的输出流
  • ;:分隔不同的 filter 链
  • ,:分隔同一链中的 filter

常用视频 Filter

缩放 Filter (scale)

bash
# 固定分辨率 ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4 # 保持宽高比 ffmpeg -i input.mp4 -vf "scale=1280:-1" output.mp4 # 按比例缩放 ffmpeg -i input.mp4 -vf "scale=iw/2:ih/2" output.mp4 # 限制最大尺寸 ffmpeg -i input.mp4 -vf "scale='min(1280,iw)':'min(720,ih)'" output.mp4

裁剪 Filter (crop)

bash
# 裁剪中心区域 ffmpeg -i input.mp4 -vf "crop=640:480" output.mp4 # 指定裁剪位置 ffmpeg -i input.mp4 -vf "crop=640:480:10:10" output.mp4 # 裁剪右下角 ffmpeg -i input.mp4 -vf "crop=640:480:in_w-640:in_h-480" output.mp4

叠加 Filter (overlay)

bash
# 在指定位置叠加图片 ffmpeg -i video.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4 # 叠加到右下角 ffmpeg -i video.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4 # 叠加到中心 ffmpeg -i video.mp4 -i logo.png -filter_complex "overlay=(W-w)/2:(H-h)/2" output.mp4

旋转 Filter (transpose)

bash
# 顺时针旋转 90 度 ffmpeg -i input.mp4 -vf "transpose=1" output.mp4 # 逆时针旋转 90 度 ffmpeg -i input.mp4 -vf "transpose=2" output.mp4 # 旋转 180 度 ffmpeg -i input.mp4 -vf "transpose=1,transpose=1" output.mp4

文字绘制 Filter (drawtext)

bash
# 添加简单文字 ffmpeg -i input.mp4 -vf "drawtext=text='Hello World':fontcolor=white:fontsize=24:x=10:y=10" output.mp4 # 添加带阴影的文字 ffmpeg -i input.mp4 -vf "drawtext=text='Hello':fontcolor=white:fontsize=32:x=10:y=10:shadowcolor=black:shadowx=2:shadowy=2" output.mp4 # 添加动态文字(时间戳) ffmpeg -i input.mp4 -vf "drawtext=text='%{pts\:hms}':fontcolor=white:fontsize=24:x=10:y=10" output.mp4

模糊 Filter (gblur)

bash
# 高斯模糊 ffmpeg -i input.mp4 -vf "gblur=sigma=2" output.mp4 # 强模糊 ffmpeg -i input.mp4 -vf "gblur=sigma=5" output.mp4

锐化 Filter (unsharp)

bash
# 锐化 ffmpeg -i input.mp4 -vf "unsharp=5:5:1.0:5:5:0.0" output.mp4 # 轻微锐化 ffmpeg -i input.mp4 -vf "unsharp=3:3:0.5:3:3:0.0" output.mp4

常用音频 Filter

音量 Filter (volume)

bash
# 调整音量(1.0 为原始音量) ffmpeg -i input.mp4 -af "volume=0.5" output.mp4 # 提升音量 ffmpeg -i input.mp4 -af "volume=2.0" output.mp4 # 使用分贝 ffmpeg -i input.mp4 -af "volume=3dB" output.mp4

淡入淡出 Filter (afade)

bash
# 淡入 3 秒 ffmpeg -i input.mp4 -af "afade=t=in:st=0:d=3" output.mp4 # 淡出 3 秒 ffmpeg -i input.mp4 -af "afade=t=out:st=5:d=3" output.mp4

音频混音 Filter (amix)

bash
# 混合两个音频 ffmpeg -i audio1.mp3 -i audio2.mp3 -filter_complex "amix=inputs=2:duration=first" output.mp3 # 混合三个音频 ffmpeg -i audio1.mp3 -i audio2.mp3 -i audio3.mp3 -filter_complex "amix=inputs=3:duration=longest" output.mp3

音频延迟 Filter (adelay)

bash
# 延迟音频 500 毫秒 ffmpeg -i input.mp4 -af "adelay=500|500" output.mp4 # 左右声道不同延迟 ffmpeg -i input.mp4 -af "adelay=500|1000" output.mp4

复杂 Filter 示例

画中画效果

bash
ffmpeg -i main.mp4 -i pip.mp4 -filter_complex \ "[1:v]scale=320:240[pip];[0:v][pip]overlay=10:10" \ output.mp4

多画面拼接

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

视频加速/减速

bash
# 加速 2 倍 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 # 减速 0.5 倍 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 性能优化

使用硬件加速

bash
# 使用 GPU 加速 filter ffmpeg -hwaccel cuda -i input.mp4 -vf "scale_npp=1280:720" output.mp4

预处理优化

bash
# 先裁剪再缩放(减少处理像素) ffmpeg -i input.mp4 -vf "crop=640:480,scale=320:240" output.mp4

Filter 是 FFmpeg 最强大的功能之一,掌握 Filter 的使用可以实现对音视频的精细控制。

标签:FFmpeg