MoviePy报错creation of None失败,附代码及ImageMagick相关错误信息
解决MoviePy实现打字机效果时的OSError: creation of None failed错误
错误原因总结
你的错误主要来自四个点:
- ImageMagick路径设置时机错误,MoviePy启动时未识别到正确的二进制文件
- 循环中生成空文本触发ImageMagick的标签解析异常
- 代码缩进错误,视频合成与写入逻辑不在函数作用域内
- 手动生成帧的方式效率低下,易触发临时文件处理错误
修复步骤
提前配置ImageMagick路径
在导入MoviePy任何模块前设置环境变量,确保MoviePy启动时就能调用到ImageMagick:import os # 用原始字符串或双反斜杠确保路径解析正确 os.environ["IMAGEMAGICK_BINARY"] = r"C:\Program Files\ImageMagick-7.1.1-Q16-HDRI\magick.exe"避免空文本触发错误
当frame_idx=0时会生成空字符串,直接导致ImageMagick无法生成有效图像,改用逐字符累加的方式跳过空文本场景。修正代码缩进
CompositeVideoClip和write_videofile代码块必须缩进,放在create_video_with_typewriter_effect函数内部,否则会出现变量未定义或逻辑不执行问题。改用MoviePy原生动画实现
不需要手动生成每帧图像,通过为每个字符片段设置不同的开始时间和持续时间,组合成打字机效果,这种方式更高效且避免临时文件异常。
修正后的完整代码
import os # 先设置ImageMagick路径,再导入MoviePy模块 os.environ["IMAGEMAGICK_BINARY"] = r"C:\Program Files\ImageMagick-7.1.1-Q16-HDRI\magick.exe" from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip def create_video_with_typewriter_effect(text, output_filename, fontsize=30, video_fps=30): # 加载并裁剪视频 video = VideoFileClip("D:/video.mp4").subclip(0, 2) video_duration = video.duration # 计算每个字符的显示间隔 char_duration = video_duration / len(text) if len(text) > 0 else 0 # 生成逐字符显示的文本片段 text_clips = [] for i in range(len(text)): current_text = text[:i+1] clip = TextClip(current_text, fontsize=fontsize, font='Arial-Bold', color='white') clip = clip.set_position(("center", "center")) clip = clip.set_start(i * char_duration) clip = clip.set_duration(video_duration - i * char_duration) text_clips.append(clip) # 合成原视频与文本片段 final_video = CompositeVideoClip([video] + text_clips) # 输出最终视频 final_video.write_videofile(output_filename, codec='libx264', fps=video_fps) # 调用函数 text = "Ancient Ruins and Storied History Journey through Sri Lanka's Cultural Triangle" output_filename = "D:/output_video.mp4" create_video_with_typewriter_effect(text, output_filename)
额外注意事项
- 确保
Arial-Bold字体在系统中存在,若找不到可替换为系统已有的字体名称,比如'simhei'(黑体) - 若仍有ImageMagick相关错误,检查路径是否正确,也可直接在MoviePy的
config_defaults.py中设置IMAGEMAGICK_BINARY的值
内容的提问来源于stack exchange,提问作者MrDumb
相关产品推荐
相关产品推荐

