'module' 使用 Moviepy 时对象不可调用

'module' object is not callable when working with Moviepy

我正在使用 Moviepy 开发一个简单的视频编辑程序,但出于某种原因,我遇到了一堆奇怪的错误,而且在我看来是不一致的错误。

问题似乎是 "VideoFileClip" class,由于某种原因无法访问。该代码最近已 运行 成功,但我们不确定是否对程序进行了一些细微的更改,或者库中是否存在错误,导致程序失败。我们尝试了 3 次单独安装 Moviepy(两次单独安装和尝试在 Windows 上使用 Anaconda 进行调试,一次使用 Ubuntu)

    # -*- coding: utf-8 -*-

import numpy as np
import pandas as pd
import moviepy



def clip(t_start,t_stop):
    myVideoFile = "C.mp4"
    myVid = VideoFileClip(myVideoFile)
    myVid = myVid.subclip(t_start,t_stop)
    return myVid


tfile = "timeStampLog.csv"
timestamps = np.array(pd.read_csv(tfile, header=None, sep=';'),dtype=float)
print(timestamps)


for n in range(np.size(timestamps[:,0])):
    my_clip = clip(timestamps[n,0],timestamps[n,1])
    my_clip.write_videofile("movie{0}.mp4".format(n)) # default codec: 'libx264', 24 fps

返回的错误在这里:

Traceback (most recent call last):
File "test.py", line 27, in <module>
my_clip = clip(timestamps[n,0],timestamps[n,1])
File "test.py", line 16, in clip
myVid = moviepy.video.io.VideoFileClip(myVideoFile)
TypeError: 'module' object is not callable

如果实例化的任何 类 来自 moviepy 模块,您需要使用它们的完全限定名称(即 moviepy.VideoFileClip)。

或者您需要使用 from moviepy import VideoFileClip.

将特定的 类 导入到当前模块的命名空间中

你还没有真正导入你需要的东西。除了 import moviepy,您还需要做以下三件事之一:

from moviepy.editor import *  # Quick and dirty
import moviepy.editor as mp  # You don’t need to specify everything you are using, just use mp before each eg clip = mp.VideoFileClip(params)
from moviepy.editor import VideoFileClip  # Mosy efficient but you need to specify everything from moviepy that you are using

对于你的代码片段,我会使用最后一个。

要进一步了解如何最好地从 moviepy 导入内容,请阅读文档 here