2017-05-28 44 views
2

我正在使用MoviePy在服务器上自动从视频剪辑创建GIF。该图书馆帮助进行各种视频转换和修剪以创建GIF。Moviepy - 带有时间从左到右移动的帧(感兴趣区域)的作物视频

在我目前的项目中,我有一个有很多移动物体的视频剪辑,很难对感兴趣的区域进行自动跟踪。 (下面的快速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

您正在寻找moviepy中的scroll函数。该文档缺乏,但它们是here,以及源代码here

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_start and 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 = vfx.scroll(clip, w=clip.w, h=var, x_speed=speed, y_start=height_to_top_of_wanted_bit) 
new_clip.set_duration(1.0/speed) 

clip.write_gif("my_gif.gif") 

请注意,这段代码没有进行测试。