Moviepy - 裁剪视频,其中帧(感兴趣的区域)随时间从左向右移动

Ami*_*mit 9 python gif video-editing moviepy

我正在使用 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")
Run Code Online (Sandbox Code Playgroud)

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

欢迎任何建议。

tbu*_*s13 5

您正在寻找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; 要执行操作的剪辑

  • h并w决定最终剪辑的高度和宽度

  • x_speed并y_speed决定滚动的速度。不确定这些是用什么来衡量的,所以您可能必须研究源代码,或者只是反复试验。

  • x_start这y_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")
Run Code Online (Sandbox Code Playgroud)

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