MoviePy传入PIL图像创建ImageClip时报AttributeError: shape错误如何解决
报错根因
AttributeError: shape 触发的原因非常明确:MoviePy的ImageClip构造器默认仅支持接收numpy数组格式的图像输入,你直接传入的是PIL Image类的实例,而PIL图像本身没有shape属性,所以会触发属性缺失报错。
你将图像存到本地再读取时,MoviePy内部会自动把读取到的图像数据转换为numpy数组,因此可以正常运行。
解决方案
不需要修改整体业务逻辑,仅需要在传入ImageClip前,把PIL图像手动转换为numpy数组即可,全程都在内存中完成,无需本地文件中转。
- 首先确保你已经导入numpy库:
import numpy as np
- 把你代码中创建ImageClip的行修改为:
logo = (ImageClip(np.array(frame)) .set_duration(video_duration) .set_position((0,0.10), relative=True))
补充说明
如果你的PIL图像是带透明度的RGBA模式,转换后的numpy数组会自动保留alpha通道,叠加到视频上的时候透明度效果也会正常生效,不需要额外处理。
如果出现颜色显示异常的情况,只需要额外加一步通道顺序转换即可:np.array(frame)[:, :, ::-1],把RGB转为BGR格式适配底层渲染逻辑即可。
内容的提问来源于stack exchange,提问作者Bambi2k21
相关产品推荐
相关产品推荐

