且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2023-01-08 13:03:43

这是关于你要找什么?



img src =https://i.stack.imgur.com/4CJiI.gifalt =进行动作>



这个糟糕的例子有一段持续时间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




  • x 从位置720移动到1000秒,持续10秒。这等于28像素/秒。


  • y 很简单。


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


  • 重叠的视频( fg.mkv 在这个例子中)已经有10秒到它的持续时间出现。



I'm trying to write a command within FFmpeg that will first overlay one video stream on top of another one. Then I want the overlayed video to move from one pixel coordinate at a known time, and end at another pixel coordinate at a later time.

I'm comfortable with the basics of the -filter_complex, but I cannot figure out how to apply any arithmetic expressions - like the one's referenced here: https://www.ffmpeg.org/ffmpeg-utils.html#Expression-Evaluation

Here's an example of something I'd like to accomplish.

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

In this example the overlay is stationary at pixel coordinate 720x0 from the 10th second to the 20th second.

However, Id like to have it move to a new location in a linear fashion and end at a different pixel coordinate.

For example, during that 10 second overlay, I'd like to have it start at 720x0, but then end at 1000x100.

Is this possible?

Is this about what you're looking for?

This crappy example has a duration of 6 seconds. The red box appears after 2 seconds and ends 3 seconds later.

Example:

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

  • Move x from position 720 to 1000 in 10 seconds. That equals 28 pixels/second.

  • y is easy enough.

  • t is the timestamp in seconds.

  • The overlaid video (fg.mkv in this example) will already be 10 seconds into its duration when it appears.