我正在以元组形式生成一些动画帧,其中可能包含(0,0)值,而在生成带有moviepy的帧时,我想将其省略。 xy
在循环中包含以下内容。第一次和第二次迭代包含(0,0),其余则包含浮点数。我想忽略那些拥有(0,0)的迭代。可以用moviepy的make_frame(t)def完成吗?我需要一些建议。
(0, 0)
(0, 0)
(82.5, 82.5)
(82.5, 82.5)
(108.28125, 108.28125)
(108.28125, 108.28125)
我遇到以下错误:
Traceback (most recent call last):
File "C:\vhosts\VIDEO_TWO_CLONE\vapory-examples-master\scene9.py", line 151, in <module>
clip = VideoClip(make_frame, duration=5)
File "C:\Anaconda64\lib\site-packages\moviepy\video\VideoClip.py", line 103, in __init__
self.size = self.get_frame(0).shape[:2][::-1]
AttributeError: 'NoneType' object has no attribute 'shape'
Process terminated with an exit code of 1
这是make_frame(t)的定义:
def make_frame(t):
# PREPARE A DRAWING SURFACE
surface = gizeh.Surface(width=W, height=H, bg_color=(0,0,0)) # in pixels
p = PointAnimation((0,0), (110,110), tween=['easeOutElastic', 1, 0.2])
xy = p.make_frame(t, 0.2, 1, 4, 5)
if str(xy) == '(0,0)':
circle = gizeh.circle(r=30, xy=xy, fill=(1,1,0))
circle.draw(surface) # draw the circle on the surface
return surface.get_npimage()
clip = VideoClip(make_frame, duration=5)
clip.write_gif("circle.gif", fps=25, fuzz=10)
答案 0 :(得分:1)
在您的代码中,您有if str(xy) == '(0,0)'
,而实际上应该为if str(xy) == '(0, 0)'
(请注意元组内部的空间;这是在Python中将元组转换为字符串的方式)。但是,一种更好的方法是if xy == (0,0)
(这里的空间无关紧要,因为没有转换为字符串)。