使用Moviepy,将视频裁剪为从左到右移动的帧(感兴趣区域),同时保留时间。

9
我正在使用MoviePy在服务器上自动从视频剪辑中创建GIF。该库帮助进行各种转换和修剪视频以创建GIF。
在我的当前项目中,有一个视频剪辑,其中有许多移动的物体,使得自动跟踪感兴趣区域变得困难。 (下面是一个快速的gif展示了场景,尽管那里的背景可以很容易地消除并跟踪物体。但我们假设跟踪物体超出了项目范围。)
如下图所示,红色矩形是随时间从左到右移动的感兴趣区域。 我想裁剪该区域并创建一个GIF。

enter image description here

我正在使用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")

如何添加时间因素以使这些坐标随时间而变化。
欢迎任何建议。
1个回答

5
您正在寻找MoviePy中的“scroll”函数。它的文档不太详细,但可以在这里找到,并且源代码在这里
参数: 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")

请注意,这段代码没有经过测试。

什么是 vfx - tommy.carstensen
vfx 意味着视觉效果,可能需要 from moviepy.editor import vfx 或类似的代码。我已经更新了代码,将其删除并替换为在 MoviePy 中应用效果的推荐方法。 - Tom Burrows

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接