5

我正在使用 MoviePy 在服务器上自动从视频剪辑创建 GIF。该库帮助对视频进行各种转换和修剪以创建 GIF。

在我目前的项目中,我有一个包含大量移动对象的视频剪辑,因此很难自动跟踪感兴趣的区域。 (下面的快速 gif 显示了场景,虽然那里的背景可以很容易地消除并进行对象跟踪。但假设跟踪对象超出了项目范围)。

如下面的 gif 所示,红色矩形是随时间从左向右移动的感兴趣区域。我想裁剪那个区域并创建一个 GIF。

在此处输入图像描述

我正在使用 MoviePy 从视频中裁剪出一个矩形来创建一个 gif。但是矩形固定在其原始坐标位置。我正在寻找一种方法来随时间移动该矩形并将其裁剪以创建 GIF。

clip = (VideoFileClip("my_video.mp4")
         .subclip((1,10.1),(1,14.9))
         .resize(0.5)
         .crop(x1=145,y1=110,x2=400,y2=810)) 

clip.write_gif("my_gif.gif")

如何添加时间因子以使该坐标随时间变化。

欢迎任何建议。

4

1 回答 1

4

您正在寻找scrollmoviepy中的功能。缺少它的文档,但它们在这里,源代码在这里

moviepy.video.fx.all.scroll(clip, h=None, w=None, x_speed=0, y_speed=0, x_start=0, y_start=0, apply_to='mask')

参数:

  • clip; 要操作的剪辑

  • hw确定最终剪辑的高度和宽度

  • x_speedy_speed决定了滚动的速度。不确定这些是用什么衡量的,因此您可能必须调查源代码,或者只是反复试验。

  • x_starty_start是从 (0,0) 开始滚动的距离。

  • apply_to; 和口罩有关的东西,你就不需要了!

最终代码:

clip = (VideoFileClip("my_video.mp4")
     .subclip((1,10.1),(1,14.9))
     .resize(0.5)
     .crop(x1=145,y1=110,x2=400,y2=810))

# You won't need to set `w` and `h` if you are separately cropping it
new_clip = clip.scroll(w=clip.w, h=var, x_speed=speed, y_start=height_to_top_of_wanted_bit)
new_clip.set_duration(1.0 / speed)

new_clip.write_gif("my_gif.gif")

请注意,此代码未经测试。

于 2017-05-28T12:19:50.453 回答