我正在使用 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")
如何添加时间因子,使这个坐标随时间变化。
欢迎提出任何建议。
最佳答案
您正在寻找 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')
参数:
剪辑
;要执行的剪辑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")
请注意,此代码未经测试。
关于python - Moviepy - 裁剪视频,帧(感兴趣区域)随时间从左向右移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44225481/