Moviepy报错:'NoneType' object has no attribute 'set_duration' 求助
问题解决:AttributeError: 'NoneType' object has no attribute 'set_duration'
错误根源
- TextClip创建失败:直接写
font='Arial.ttf'会导致MoviePy找不到字体文件,返回None,后续调用set_duration自然触发报错。 - numpy数组未转成剪辑对象:你生成的白色背景是原始numpy数组,无法直接传入
CompositeVideoClip,必须转为ImageClip类型。
修正后的代码
from moviepy.editor import * import numpy as np # 创建白色背景并转为ImageClip,设置时长5秒 # 注意尺寸顺序为(高度, 宽度, 通道),若要标准1080P建议用(1080, 1920) white_bg = np.ones((1080, 1920, 3)) * 255 bg_clip = ImageClip(white_bg).set_duration(5) # 创建文字剪辑:用系统字体名或完整字体路径 text = "My Super Awesome Text" # 方式1:使用系统已安装的字体名(如Windows/macOS的"Arial") text_clip = TextClip(text, font='Arial', fontsize=24, color='black') # 方式2:找不到字体时指定绝对路径,示例为macOS系统Arial路径 # text_clip = TextClip(text, font='/System/Library/Fonts/Arial.ttf', fontsize=24, color='black') # 设置文字位置和时长 text_clip = text_clip.set_pos('center').set_duration(5) # 合成背景与文字 final_clip = CompositeVideoClip([bg_clip, text_clip]) # 导出视频,帧率设为24保证流畅度 final_clip.write_videofile("/Users/name/Desktop/animation.mp4", fps=24)
关键修改说明
- 背景处理:将numpy数组通过
ImageClip()转为剪辑对象,并统一设置5秒时长,确保和文字剪辑同步。 - 字体修复:用系统字体名(如
Arial)替代文件名,或提供字体文件的绝对路径,确保TextClip能正常实例化。 - 帧率优化:把
fps=1改为fps=24,避免导出的视频出现卡顿,符合常规视频播放标准。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

