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

标签 python gif video-editing moviepy

我正在使用 MoviePy 在服务器上自动从视频剪辑创建 GIF。该库帮助对视频进行各种转换和修剪以创建 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")

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

欢迎提出任何建议。

最佳答案

您正在寻找 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')

参数:

  • 剪辑;要执行的剪辑

  • 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")

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

关于python - Moviepy - 裁剪视频,帧(感兴趣区域)随时间从左向右移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44225481/

相关文章:

python - 无法从 fastkml 包导入 kml 模块

javascript - JQuery/Django 有办法构建 "click the text to edit"吗?

android - 添加动画 GIF 到电子邮件/短信/whatsapp

python - 使用 python 或命令行进行视频编辑

ffmpeg - 垂直拼接两个视频的命令

python - 通过跳过缺失值 Python 3 有效地迭代字典列表值

python - 如何使用 2 列值更新第三列中的值?

image - 使用 ImageMagick 将 gif 动画的背景更改为透明,但帧重叠。怎么解决?

c# - C# 中的 GIF LZW 压缩

python - OpenCV视频写出尺寸减小