【问题标题】:Rotating a color clip in MoviePy?在 MoviePy 中旋转颜色剪辑?
【发布时间】:2020-03-30 22:02:51
【问题描述】:

我正在尝试旋转一个moviepy颜色剪辑而不对其进行动画处理,以便它在开始时旋转,并保持旋转直到视频结束。

我尝试了一些代码,希望它可以在 MoviePy 中旋转静止图像,而不是对其进行动画处理。以便在图像、ColorClip 或 Video 的整个持续时间内按输入角度旋转。

import moviepy.editor as mped
image = mped.ImageClip("image.jpg", duration=3)
image.rotate(20)
image.write_videofile('image_without_rotation.mp4', fps=5)

但是,这不会旋转静止图像,因为 ImageClip 没有旋转功能。

下面的代码会旋转到 3 秒。并且可以通过将 20*t 更改为像 20 这样的常量来适应固定旋转/非动画。

clip = mped.ImageClip('image.jpg')
rotated_clip = (clip.add_mask().fx(mped.vfx.rotate, lambda t: 20*t, expand=False).set_duration(3))
centered_rotated_clip = mped.CompositeVideoClip([rotated_clip.set_pos("center")])
centered_rotated_clip.write_videofile('rotated_image.mp4'), fps=10)

但是,此代码不适用于moviepy ColorClip。

color_clip = mped.ColorClip(size=[300, 300], color=[1 ,1, 1])
rotated_color_clip = (color_clip.fx(mped.vfx.rotate, lambda t: 20, expand=False).set_duration(3))
composited_clip = mped.CompositeVideoClip([rotated_Color_ clip.set_pos("center")])
composited_clip.write_videofile('rotated_clip.mp4', fps=10)

反而会出现以下错误

    raise TypeError("Cannot handle this data type: %s, %s" % typekey)
TypeError: Cannot handle this data type: (1, 1, 3), <i8

因为它到达了这条线

return np.array( Image.fromarray(pic).rotate(angle, expand=expand),

在 pil_rotater 内部。

如何将moviepy ColorClip 旋转20 度?

【问题讨论】:

    标签: python numpy python-imaging-library moviepy


    【解决方案1】:

    更新 2:此修复包含在 v2.0.0.dev1 中。使用 pip install --pre --upgrade moviepy 从 pip 安装。

    更新:我已经找到了错误,您可以在这里跟踪错误修复的进度:https://github.com/Zulko/moviepy/pull/1139

    同时,作为一种解决方法,不要将 color=[150, 100, 200] 传递给 ColorClip,而是传递 color=np.array([150, 100, 200]).astype(np.uint8)

    ——

    代码

    image = mped.ImageClip("image.jpg", duration=3)
    image.rotate(20)
    image.write_videofile('image_without_rotation.mp4', fps=5)
    

    不起作用,因为image.rotate() 返回一个新剪辑,所以您必须使用image = image.rotate(20)

    这应该适用于 ImageClips 和 ColorClips,但您似乎发现了一个错误,即旋转不适用于 ColorClips。最好的办法是在 github.com/zulko/moviepy 将其报告为问题,或者尝试自己找到修复程序并将其作为拉取请求提交。

    目前,创建一个 ColorClip,将其写入文件,然后将其作为 ImageClip 再次读入。

    【讨论】:

    • 谢谢汤姆。我确实看了一下尝试解决这个问题,然后报告为问题。然后我看到你已经提交了错误修复和拉取请求。谢谢这个汤姆。何时会发布具有此修复程序的版本,以便我可以使用它?我已经在我的机器上测试了你的修复,它也可以在这里工作。有没有办法在剪辑旋转之前掩盖剪辑后面的内容?这样它就不会变黑了? rotate(20).add_mask() 似乎创建了一个黑色背景。
    • 嘿@OneWorld,我很高兴看到它对你有用!修复的版本很可能是 v2.0,可能不会持续几周,因为我们正在处理几个不同的相当大的更改。请参阅我对这篇文章所做的编辑,您可以在修复发布之前将其用作解决方法。
    • 我不确定面具,我从来没有在moviepy中真正使用过它们。我会尝试在某个时间回复您。
    • 我看到面具确实有效。你只需做 rotateClip = ColorClip.add_mask().rotate(20) :-)
    猜你喜欢
    • 2023-01-04
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2017-08-03
    • 2021-08-17
    • 2022-06-29
    • 2022-01-11
    • 2018-06-01
    相关资源
    最近更新 更多