如何使覆盖图像 ffmpeg 左右过渡

如何使覆盖图像 ffmpeg 左右过渡

我使用以下命令使视频上的覆盖图像从左到右过渡。

ffmpeg -i 测试.mp4 -i transparent.png -filter_complex "overlay=x='if(gte(t,0), -w+(t)*100, 3)':y=450" out.mp4

叠加图像不断从左向右移动。我需要它在某个点停止,比如从左到右的过渡。该怎么做?

答案1

呵呵,有趣的任务。所以我认为解决方案是

ffmpeg -i 1.ts -i 2.ts -filter_complex "[0:v][1:v]overlay=x='if(lte(-w+(t)*100,w/2),-w+(t)*100,w/2)':y=0[out]" -map '[out]' -y out.mp4

此滤镜图将第二张图片从左向右移动,直到到达屏幕的一半(w/2)。因此,您只需修改此表达式中的 w/2。对于某些静态停止点(100 像素),情况也是如此:

ffmpeg -i 1.ts -i 2.ts -filter_complex "[0:v][1:v]overlay=x='if(lte(-w+(t)*100,100),-w+(t)*100,100)':y=0[out]" -map '[out]' -y out.mp4

希望能帮助到你。

答案2

滑动效果怎么做?

通常,对于幻灯片效果,您必须:

  • 使用以下方法创建具有正确大小和持续时间的特定颜色(例如黑色)的背景,在该背景上将显示图像:color来源
  • 使用movie来源
  • 将图像叠加在背景上overlay筛选
  • 根据当前帧号或时间戳设置叠加层的坐标

例子

image.png下面是一个保存为(尺寸:1920⨉1080,剪辑时长:15 秒)的图像示例:

ffmpeg -f lavfi -i "\
color=black:d=15:s=1920x1080[background]; \
movie=image.png[overlay]; \
[background][overlay]overlay='W-n:(H-h)/2' \
" output.mp4

图像将从右向左滑动而不停止:

以下是图像停止在中心的示例:

ffmpeg -f lavfi -i "\
color=black:d=15:s=1920x1080[background]; \
movie=image.png[overlay]; \
[background][overlay]overlay='min(W-n\,0):(H-h)/2' \
" output.mp4

如何控制滑动参数

任何给定时间的覆盖位置都作为overlay过滤器的一个选项指定。该位置必须以图像左上角的坐标给出。

上述第一个例子中的 X/Y 坐标对是W-n(H-h)/2,其中:

  • W是背景宽度(1920)
  • n是当前帧号
  • H是背景高度(1080)
  • h是覆盖高度(此处为 1080,但可能不同)

因此,在第 0 帧,图像最初将放置在1920-0=1920年像素从左侧开始,因此图像将从右侧滑入n增加。

一些技巧:

  • 如果你想提高滑动图像的速度,你必须乘以n按固定数字。
  • 如果希望图像在某个点停止,表达式x必须计算为0,因此可以使用min(W-n, 0)。在这种情况下,即使帧数大于宽度,图像也不会移动到负 x 位置,而是停留在 0 处。
  • 如果要将图像从左向右或从下向上滑动,只需相应地修改坐标的表达式。

相关内容