FFmpeg 将覆盖从一个像素坐标移动到另一个像素坐标

occ*_*ech 3 video ffmpeg

我正在尝试在 FFmpeg 中编写一个命令,该命令将首先将一个视频流覆盖在另一个视频流之上。然后我希望叠加的视频在已知时间从一个像素坐标移动,并在稍后的时间在另一个像素坐标处结束。

我很舒服的基础知识-filter_complex,但我无法弄清楚如何申请任何算术表达式-像一个人在这里引用:https://www.ffmpeg.org/ffmpeg-utils.html#Expression-Evaluation

这是我想要完成的一个例子。

ffmpeg -i [INPUT1] -i [INPUT2] -filter_complex "[0:v][1:v]overlay=shortest=1:x=720:y=0:enable='between(t,10,20)'[overlay];...
Run Code Online (Sandbox Code Playgroud)

在这个例子中,从第 10 秒到第 20 秒,叠加层在像素坐标 720x0 处是静止的。

但是,我希望它以线性方式移动到新位置并在不同的像素坐标处结束。

例如,在 10 秒叠加期间,我希望它以 720x0 开始,然后以 1000x100 结束。

这可能吗?

llo*_*gan 9

这是关于你要找的吗?

做一个动作

这个糟糕的例子有 6 秒的持续时间。红框在 2 秒后出现,3 秒后结束。

例子:

ffmpeg -i bg.mp4 -i fg.mkv -filter_complex \
"[0:v][1:v]overlay=enable='between=(t,10,20)':x=720+t*28:y=t*10[out]" \
-map "[out]" output.mkv
Run Code Online (Sandbox Code Playgroud)
  • x在 10 秒内从位置 720移动到 1000。这等于 28 像素/秒。

  • y 很容易。

  • t 是以秒为单位的时间戳。

  • 重叠的视频(fg.mkv在本例中)在出现时已经是其持续时间的 10 秒。