在 MoviePy 中旋转彩色剪辑?
Rotating a color clip in MoviePy?
我正在尝试旋转一个电影般的彩色剪辑而不对其进行动画处理,以便它在开始时旋转,并一直旋转到视频结束。
我尝试了一些代码,希望它能在 MoviePy 中旋转静止图像,而不对其进行动画处理。以便在图像、ColorClip 或视频的整个持续时间内按输入角度旋转。
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)
但是,此代码不适用于电影风格的 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.
如何将动画 ColorClip 旋转 20 度?
更新 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()
returns一个新剪辑,所以你必须做image = image.rotate(20)
。
这应该适用于 ImageClips 和 ColorClips,但是您似乎发现了一个错误,其中旋转不适用于 ColorClips。最好的办法是在 github.com/zulko/moviepy 将其报告为问题,或者尝试自己找到修复程序并将其作为拉取请求提交到那里。
暂时创建一个ColorClip,将其写入文件,然后将其作为ImageClip再次读入。
我正在尝试旋转一个电影般的彩色剪辑而不对其进行动画处理,以便它在开始时旋转,并一直旋转到视频结束。
我尝试了一些代码,希望它能在 MoviePy 中旋转静止图像,而不对其进行动画处理。以便在图像、ColorClip 或视频的整个持续时间内按输入角度旋转。
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)
但是,此代码不适用于电影风格的 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.
如何将动画 ColorClip 旋转 20 度?
更新 2:此修复包含在 v2.0.0.dev1 中。使用 pip install --pre --upgrade moviepy
.
更新:我发现了这个错误,你可以在这里跟踪错误修复的进度: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()
returns一个新剪辑,所以你必须做image = image.rotate(20)
。
这应该适用于 ImageClips 和 ColorClips,但是您似乎发现了一个错误,其中旋转不适用于 ColorClips。最好的办法是在 github.com/zulko/moviepy 将其报告为问题,或者尝试自己找到修复程序并将其作为拉取请求提交到那里。
暂时创建一个ColorClip,将其写入文件,然后将其作为ImageClip再次读入。