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


3

我使用以下命令在视频上进行叠加图像的从左到右的过渡。

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

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

Answers:


8

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

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

希望能帮助到你。


我在这里发布了另一个问题 superuser.com/questions/730062/ffmpeg-fade-between-images 你能救吗?
2vision2

iflte 表达式可以简化 min / max 表达式。请参阅下面的其他答案。 (我最初是为另一个问题编写的,移到这里是为了不创建重复的线程。)
slhck

0

如何做滑动效果?

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

  • 使用以下内容创建具有正确大小和持续时间的特定颜色(例如,黑色)的背景,在该背景上将显示图像 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 从左边开始的像素,因此图像将从右侧滑入 ñ 增加。

一些技巧:

  • 如果要增加滑动图像的速度,则必须相乘 ñ 按固定数字。
  • 如果你想让图像在某个时刻停止,那么 x 表达式必须评估为 0,所以你可以使用 min(W-n, 0)。在这种情况下,即使帧数大于宽度,图像也不会移动到负x位置,而是保持为0。
  • 如果要从左到右或从下到上滑动图像,只需相应地修改坐标的表达式。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.