Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MoviePy VideoFileClip实例没有属性';阅读器';_Python_Numpy_Memory Leaks_Imagemagick_Moviepy - Fatal编程技术网

Python MoviePy VideoFileClip实例没有属性';阅读器';

Python MoviePy VideoFileClip实例没有属性';阅读器';,python,numpy,memory-leaks,imagemagick,moviepy,Python,Numpy,Memory Leaks,Imagemagick,Moviepy,关于这个问题,我搜索了几天,但没有找到解决办法。我有一个很大的脚本(我正在尝试连接大量视频,~100-500),这就是为什么我会出现错误“打开的文件太多”。阅读Zulko对其他问题的回复,我发现有必要手动删除每个VideoFileClip实例,如下所示: del clip.reader del clip 我面临的问题是,我有一个简单的hello\u world尝试这样做,但得到的错误是VideoFileClip实例没有属性“reader” 代码如下: from moviepy.editor i

关于这个问题,我搜索了几天,但没有找到解决办法。我有一个很大的脚本(我正在尝试连接大量视频,~100-500),这就是为什么我会出现错误“打开的文件太多”。阅读Zulko对其他问题的回复,我发现有必要手动删除每个VideoFileClip实例,如下所示:

del clip.reader
del clip
我面临的问题是,我有一个简单的hello\u world尝试这样做,但得到的错误是
VideoFileClip实例没有属性“reader”
代码如下:

from moviepy.editor import *
rel_path = "main.py"
file_path="hello_world.mp4"
newVideo = VideoFileClip(file_path)
del newVideo.reader
del newVideo
我正在使用El Capitan(OS X),更新了MoviePy、Numpy、ImageMagick,以及我所看到的所有需要的软件包,但我仍然会遇到这个错误。问题是我的电脑有时会死机,因为它占用了太多内存。我目前正在连接25个视频块,并试图删除所有25个“打开的文件”,连接下一个25个,以此类推。之后,我会连接较长的视频

请注意,如果没有del newVideo.reader这一行,我仍然会收到打开过多文件的错误

当我尝试运行真正的脚本时,如果我不添加newVideo.reader,就会出现以下错误

Traceback (most recent call last):
  File "/Users/johnpeebles/mispistachos/vines/video/reader.py", line 135, in compile_videos
    newVideo = VideoFileClip(videoPath).resize(height=finalHeight,width=finalWidth).set_position('center').set_start(currentDuration)
  File "/Library/Python/2.7/site-packages/moviepy/video/io/VideoFileClip.py", line 55, in __init__
    reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt)
  File "/Library/Python/2.7/site-packages/moviepy/video/io/ffmpeg_reader.py", line 32, in __init__
    infos = ffmpeg_parse_infos(filename, print_infos, check_duration)
  File "/Library/Python/2.7/site-packages/moviepy/video/io/ffmpeg_reader.py", line 237, in ffmpeg_parse_infos
    proc = sp.Popen(cmd, **popen_params)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1223, in _execute_child
    errpipe_read, errpipe_write = self.pipe_cloexec()
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1175, in pipe_cloexec
    r, w = os.pipe()
OSError: [Errno 24] Too many open files
Error compiling videos
Exception AttributeError: "VideoFileClip instance has no attribute 'reader'" in <bound method VideoFileClip.__del__ of <moviepy.video.io.VideoFileClip.VideoFileClip instance at 0x136e46908>> ignore
祖尔科本人:

在MoviePy的下一个版本中,只需
delclip
即可

这是在版本0.2.2发布之前。因此,您似乎不需要执行
delclip.reader

更确切地说,你不能这样做<代码>视频文件剪辑定义一个析构函数为您执行此操作:

def __del__(self):
  """ Close/delete the internal reader. """
  del self.reader
但是,由于您已经删除了它,因此您会得到
属性错误

VideoFileClip实例没有属性“reader”


中,我已经解决了我的问题,详细描述见

安装ImageMagick后,MoviePy将自动检测到它,Windows上除外!在手动安装MoviePy之前,Windows用户需要编辑
MoviePy/config_defaults.py
以提供ImageMagick二进制文件的路径,该二进制文件称为convert。应该是这样的:
IMAGEMAGICK\u BINARY=“C:\\Program Files\\IMAGEMAGICK\u VERSION\\convert.exe”

您好,谢谢您的回复。你说得对,我忘了提到,如果我只放“del clip”,我会得到“打开的文件太多”的错误,所以这也不好:/@Waclock你需要删除对
clip
本身的所有引用。您是否尝试过执行
clip.reader=None
?这应该有相同的效果,删除它没有副作用。我会给它一个尝试。我相信我有,我创建了一个数组并推送每个剪辑对象,然后,遍历该对象并删除我拥有的剪辑的每个实例。@Waclock你能发布更多的代码吗。对我来说,听起来你用这个方法保留了很多剪辑对象。你可能是对的。我已经添加了“真实代码”,如果你不明白,请告诉我。据我所知,我正在正确删除每个实例。在for循环中,您删除了刚才创建的引用。你没有关闭任何东西<代码>视频和字幕=[]删除列表中的引用。也许你列表中的~50个参考资料和
预处理视频的内容都太多了。你说我什么都不结束是什么意思?我每50个视频(或当我看到最后一个视频时)删除视频和字幕中的每个元素。预处理视频包含的元素不超过1-3个(这是编译50个视频后生成的视频,因此如果我有150个视频,我会有3个compositevideoclips),使用CompositeVideoClip后,我将其删除并创建新视频的新引用(由50个视频组成)。使用
del clip
的方式不会破坏任何剪辑对象,因此不会关闭文件。这可以通过重置列表来完成。在引发
异常之前,
计数器的值是多少?为什么我使用del clip的方式是错误的?那么我应该如何使用它:S。值是不同的,有时是50,有时甚至更大。您建议我如何删除这些剪辑?(或者为什么我这样做是错误的)
def __del__(self):
  """ Close/delete the internal reader. """
  del self.reader