FFmpeg 将叠加层从一个像素坐标移动到另一个像素坐标

FFmpeg move overlay from one pixel coordinate to another

我正在尝试在 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];...

在此示例中,覆盖图从第 10 秒到第 20 秒固定在像素坐标 720x0 处。

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

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

这可能吗?

这就是您要找的东西吗?

这个蹩脚的例子有 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
  • 在 10 秒内将 x 从位置 720 移动到 1000。那等于 28 pixels/second。

  • y 很简单。

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

  • 叠加视频(在本例中为 fg.mkv)出现时,其持续时间已达到 10 秒。