如何让FFmpeg crop滤镜参数随时间变化实现分屏边界滑动动画
报错原因
FFmpeg 的 crop 滤镜的宽度、高度参数为静态配置项,仅在滤镜链初始化阶段计算一次,不支持运行时随时间变量 t 动态修改。你在宽度表达式中加入时间参数后,滤镜初始化校验无法通过,因此抛出参数无效错误。
可行实现方案
放弃 crop + hstack 的组合逻辑,通过动态蒙版+overlay的方案实现分割线浮动效果,涉及的滤镜参数均支持每帧动态计算,完美匹配需求:
# 示例为分割线10秒内从最左移动到最右的效果,可自行调整速度、摆动逻辑 ffmpeg -i out/i1.mp4 -i out/i2.mp4 -filter_complex \ "color=c=white:s=hd1080,format=gray,lutyuv=y='gte(X, t*192)'[mask];\ [0:v][mask]alphamerge[i1_alpha];\ [1:v][i1_alpha]overlay=x=0:y=0" \ out/generated.mp4
参数说明
s=hd1080要修改为你的输入视频的实际分辨率,比如1920x1080就写hd1080,也可以直接写1280x720这类具体值- 示例中的
192是速度参数,由1080P宽度1920除以10秒得到,代表每秒分割线向右移动192像素,10秒走完全程,你可以修改该数值调整移动速度 - 如果要实现分割线左右浮动效果,把lutyuv的表达式改为
y='gte(X, 960 + 300*sin(t))',即可实现以中心为原点、幅度300像素的周期摆动效果 - 表达式中的
X代表当前计算的像素点的横坐标,t代表当前帧的时间(单位为秒),你可以基于这两个变量自定义任意分割线运动规则
内容的提问来源于stack exchange,提问作者VlFedotov
相关产品推荐
相关产品推荐

