你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

FFmpeg源码分析:视频滤镜介绍(上)

2021/12/22 1:20:42

FFmpeg在libavfilter模块提供音视频滤镜。所有的视频滤镜都注册在libavfilter/allfilters.c。我们也可以使用ffmpeg -filters命令行来查看当前支持的所有滤镜,前面-v代表视频。本篇文章主要介绍视频滤镜,包括:黑色检测、视频叠加、色彩均衡、去除水印、抗抖动、矩形标注、九宫格。

关于视频滤镜的详细介绍,可查看官方文档:视频滤镜。音频滤镜可参考前面两篇文章:音频滤镜介绍(上)和音频滤镜介绍(下)。

1、blackdetect

黑色检测,用于检测纯黑的视频间隔时间。滤波器将其分析结果输出到日志和元数据。如果找到至少具有指定最小持续时间的黑色片段,则打印一行日志,其中包含开始和结束时间戳以及持续时间。参数选项如下:

  • black_min_duration, d:最短的检测黑色时长,单位为s,默认为2.0
  • picture_black_ratio_th, pic_th:设置黑色图像的比率,默认为0.98
  • pixel_black_th, pix_th:设置黑色像素的阈值,默认为0.10

2、blend

混合,把两个视频的所有帧混合在一起,又称为视频叠加。第一个视频在顶层,第二个视频在底层,默认为最长的视频时长作为输出时长。

  • 2.1 从顶层到底层的线性水平过渡:
blend=all_expr='A*(X/W)+B*(1-X/W)'
  • 2.2 从右到左覆盖,可用于转场动画过渡效果:
blend=all_expr='if(gte(N*SW+X,W),A,B)'
  • 2.3 从上到下覆盖,可用于转场动画过渡效果:
blend=all_expr='if(gte(Y-N*SH,0),A,B)'
  • 2.4 沿对角线分割视频,两边分别显示顶层与底层 :
blend=all_expr='if(gt(X,Y*(W/H)),A,B)'

完整命令如下:

ffmpeg -i hello.mp4 -i world.mp4 -filter_complex blend=all_expr='A*(X/W)+B*(1-X/W)' blend.mp4

3、colorbalance

色彩均衡,调整视频帧的RGB分量占比。该滤波器允许在阴影、中间色调或高光区域调整输入帧,以获得红青色、洋红或蓝黄平衡效果。正调整值将平衡移向原色,负调整值则移向补色。参数选项如下:

  • rs、gs、bs:调整红、绿、蓝阴影 (最暗像素)
  • rm、gm、bm:调整红、绿、蓝基调 (中间像素)
  • rh、gh、bh:调整红、绿、蓝高亮(最亮像素)