使用MoviePy调整视频尺寸报错:'module' object is not callable
MoviePy调整视频尺寸报错:
'module' object is not callable 解决办法 问题描述
我正在使用MoviePy开发一款自动视频编辑器,实现上下叠加两个视频的功能,但在调整视频尺寸时遇到问题。导入resize模块后无法调用该命令,运行代码时持续报错,尝试使用combined.resize()也未解决,附上代码及错误信息,求排查操作失误。
运行代码
import os import random from moviepy.editor import VideoFileClip, CompositeVideoClip, concatenate_videoclips , clips_array, vfx, AudioFileClip, ImageClip from moviepy.video.fx import resize originalFolder = "c:\Users\me\Desktop\Content Software\testfold" list = os.listdir(originalFolder) minecraftFolder = "c:\Users\me\Desktop\Content Software\minecraft" minecraftList = os.listdir(minecraftFolder) def videoGen(minecraftList, list): clipIndex = int(random.random()*len(list)) filePath1 = os.path.join(originalFolder, list[clipIndex]) overlayClip = VideoFileClip(filePath1) minecraftIndex = int(random.random()*len(minecraftList)) filePath2 = os.path.join(originalFolder, list[minecraftIndex]) minecraftClip = VideoFileClip(filePath2) clips = ([overlayClip], [minecraftClip]) combined = clips_array(clips) combinedFinal = resize(combined, width=1080, height=1920) combinedFinal.write_videofile("test.mp4") videoGen(minecraftList, list)
报错信息
Traceback (most recent call last): File "c:\Users\me\Desktop\Content Software\Minecraft Video Gen.py", line 33, in <module> videoGen(minecraftList, list) File "c:\Users\me\Desktop\Content Software\Minecraft Video Gen.py", line 28, in videoGen combinedFinal = resize(combined, width=1080, height=1920) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: 'module' object is not callable
问题排查与解决
1. 核心错误原因
你当前导入的resize是模块对象,并非可直接调用的函数,直接调用模块就会触发TypeError: 'module' object is not callable错误。
2. 两种解决方式
方式一:修正导入语句,直接导入resize函数
将导入代码从:from moviepy.video.fx import resize修改为:
from moviepy.video.fx.resize import resize此时导入的是resize函数,原代码中
resize(combined, width=1080, height=1920)即可正常执行。方式二:使用剪辑对象自带的resize方法
无需单独导入resize模块,直接调用combined剪辑对象的resize方法:combinedFinal = combined.resize(width=1080, height=1920)注意:如果之前尝试此方法失败,大概率是因为导入的resize模块和方法名冲突,需删除
from moviepy.video.fx import resize这句代码后重试。
3. 额外代码错误修正
代码中存在路径错误:filePath2 = os.path.join(originalFolder, list[minecraftIndex])里的文件夹和列表不匹配,应该从minecraftFolder中读取minecraftList的元素,修正后:
filePath2 = os.path.join(minecraftFolder, minecraftList[minecraftIndex])
内容的提问来源于stack exchange,提问作者Carson Szeder
相关产品推荐
相关产品推荐

