如何使叠加图像ffmpeg的左右过渡

2vi*_*on2 4 ffmpeg video-editing

我使用以下命令在视频上从左到右转换覆盖图像。

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

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

ptQ*_*tQa 9

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

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
Run Code Online (Sandbox Code Playgroud)

此过滤器图从左到右移动第二张图片,直到它到达屏幕的一半(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
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。


slh*_*hck 6

滑动效果怎么做?

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

  • 创建特定的颜色(例如,黑色)具有正确大小和持续时间的背景,在其上图像将被显示,使用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
Run Code Online (Sandbox Code Playgroud)

图像会不停地从右向左滑动:

这是图像停在中心的示例:

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
Run Code Online (Sandbox Code Playgroud)

如何控制滑动参数

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

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

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

因此,在第 0 帧,图像最初将放置在距左侧1920 - 0 = 1920像素处,因此随着n 的增加,图像将从右侧滑入。

一些技巧:

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