Python MoviePy,使用gif作为图像剪辑?

Python MoviePy,使用gif作为图像剪辑?,python,ffmpeg,gif,shape,moviepy,Python,Ffmpeg,Gif,Shape,Moviepy,在图像剪辑中使用gif不起作用,这是正常行为吗 代码 错误 堆栈错误 回溯(最近一次呼叫最后一次): 文件“/gif_test.py”,第9行,在 watermaked.write\u videofile('./gif\u output.mp4',fps=30,threads=1) 文件“”,第2行,写入视频文件 文件“/Library/Python/2.7/site-packages/moviepy/decorators.py”,第54行,需要持续时间 返回f(夹子,*a,**k) 文件“

在图像剪辑中使用gif不起作用,这是正常行为吗

代码

错误

堆栈错误
回溯(最近一次呼叫最后一次):
文件“/gif_test.py”,第9行,在
watermaked.write\u videofile('./gif\u output.mp4',fps=30,threads=1)
文件“”,第2行,写入视频文件
文件“/Library/Python/2.7/site-packages/moviepy/decorators.py”,第54行,需要持续时间
返回f(夹子,*a,**k)
文件“”,第2行,写入视频文件
文件“/Library/Python/2.7/site packages/moviepy/decorators.py”,第137行,默认使用
返回f(夹子,*新的a,**新的kw)
文件“”,第2行,写入视频文件
文件“/Library/Python/2.7/site packages/moviepy/decorators.py”,第22行,在convert_masks_to_RGB中
返回f(夹子,*a,**k)
文件“/Library/Python/2.7/site packages/moviepy/video/VideoClip.py”,第349行,在write\u videofile中
进度条=进度条)
文件“/Library/Python/2.7/site packages/moviepy/video/io/ffmpeg_writer.py”,第209行,在ffmpeg_write_视频中
fps=fps,dtype=“uint8”):
文件“/Library/Python/2.7/site packages/tqdm/_-tqdm.py”,第833行,在iter中__
对于iterable中的obj:
文件“/Library/Python/2.7/site packages/moviepy/Clip.py”,第475行,在生成器中
帧=自身。获取帧(t)
文件“”,第2行,在get_框架中
文件“/Library/Python/2.7/site packages/moviepy/decorators.py”,第89行,在包装器中
返回f(*新功率,**新功率)
文件“/Library/Python/2.7/site packages/moviepy/Clip.py”,第95行,在get_框架中
返回自生成帧(t)
文件“/Library/Python/2.7/site packages/moviepy/video/compositing/CompositeVideoClip.py”,第110行,在make_框架中
f=c.blit_on(f,t)
文件“/Library/Python/2.7/site packages/moviepy/video/VideoClip.py”,第611行,blit_on
返回blit(img、picture、pos、mask=mask、ismask=self.ismask)
文件“/Library/Python/2.7/site packages/moviepy/video/tools/drawing.py”,第45行,blit格式
新的\u im2[yp1:yp2,xp1:xp2]=blited
ValueError:无法将输入数组从形状(150150)广播到形状(150150,3)

TL:DR,

Gif被视为video:VideoFileclip(“image.Gif”)而不是ImageClip(“image.Gif”)

工作代码:
#!/usr/bin/env python
from moviepy.editor import *

video = VideoFileClip('./video.mp4')
watermark = (ImageClip("./my.gif")
                        .set_duration(10))

watermaked = CompositeVideoClip([video, watermark], size=video.size)
watermaked.write_videofile('./gif_output.mp4', fps=30, threads=1)
ValueError: could not broadcast input array from shape (150,150) into shape (150,150,3)
Traceback (most recent call last):
  File "./gif_test.py", line 9, in <module>
    watermaked.write_videofile('./gif_output.mp4', fps=30, threads=1)
  File "<decorator-gen-51>", line 2, in write_videofile
  File "/Library/Python/2.7/site-packages/moviepy/decorators.py", line 54, in requires_duration
    return f(clip, *a, **k)
  File "<decorator-gen-50>", line 2, in write_videofile
  File "/Library/Python/2.7/site-packages/moviepy/decorators.py", line 137, in use_clip_fps_by_default
    return f(clip, *new_a, **new_kw)
  File "<decorator-gen-49>", line 2, in write_videofile
  File "/Library/Python/2.7/site-packages/moviepy/decorators.py", line 22, in convert_masks_to_RGB
    return f(clip, *a, **k)
  File "/Library/Python/2.7/site-packages/moviepy/video/VideoClip.py", line 349, in write_videofile
    progress_bar=progress_bar)
  File "/Library/Python/2.7/site-packages/moviepy/video/io/ffmpeg_writer.py", line 209, in ffmpeg_write_video
    fps=fps, dtype="uint8"):
  File "/Library/Python/2.7/site-packages/tqdm/_tqdm.py", line 833, in __iter__
    for obj in iterable:
  File "/Library/Python/2.7/site-packages/moviepy/Clip.py", line 475, in generator
    frame = self.get_frame(t)
  File "<decorator-gen-14>", line 2, in get_frame
  File "/Library/Python/2.7/site-packages/moviepy/decorators.py", line 89, in wrapper
    return f(*new_a, **new_kw)
  File "/Library/Python/2.7/site-packages/moviepy/Clip.py", line 95, in get_frame
    return self.make_frame(t)
  File "/Library/Python/2.7/site-packages/moviepy/video/compositing/CompositeVideoClip.py", line 110, in make_frame
    f = c.blit_on(f, t)
  File "/Library/Python/2.7/site-packages/moviepy/video/VideoClip.py", line 611, in blit_on
    return blit(img, picture, pos, mask=mask, ismask=self.ismask)
  File "/Library/Python/2.7/site-packages/moviepy/video/tools/drawing.py", line 45, in blit
    new_im2[yp1:yp2, xp1:xp2] = blitted
ValueError: could not broadcast input array from shape (150,150) into shape (150,150,3) 
#!/usr/bin/env python
from moviepy.editor import *

video = VideoFileClip('./video.mp4')
watermark = VideoFileclip("./image.gif")

watermaked = CompositeVideoClip([video, watermark], size=video.size)
watermaked.write_videofile('./gif_output.mp4', fps=30, threads=1)