从moviepy导入VideoFileClip时出错:AttributeError:' PermissionError'对象没有属性' message'

时间:2017-02-14 13:09:29

标签: python windows python-3.x ffmpeg anaconda

我正在使用jupyter笔记本。我也尝试过anaconda控制台。

尝试使用以下两种方式进行导入

from moviepy.editor import VideoFileClip

from moviepy.video.io.VideoFileClip import VideoFileClip

他们两个都给了我同样的错误。全部跟踪在

之下
AttributeError                            Traceback (most recent call last)
<ipython-input-10-9afa9d6e87c4> in <module>()
      6 import glob
      7 import math
----> 8 from moviepy.editor import VideoFileClip
      9 from moviepy.video.io.VideoFileClip import VideoFileClip

C:\Program Files\Anaconda3\lib\site-packages\moviepy\editor.py in <module>()
     20 # Clips
     21 
---> 22 from .video.io.VideoFileClip import VideoFileClip
     23 from .video.io.ImageSequenceClip import ImageSequenceClip
     24 from .video.io.downloader import download_webfile

C:\Program Files\Anaconda3\lib\site-packages\moviepy\video\io\VideoFileClip.py in <module>()
      1 import os
      2 
----> 3 from moviepy.video.VideoClip import VideoClip
      4 from moviepy.audio.io.AudioFileClip import AudioFileClip
      5 from moviepy.Clip import Clip

C:\Program Files\Anaconda3\lib\site-packages\moviepy\video\VideoClip.py in <module>()
     18 
     19 import moviepy.audio.io as aio
---> 20 from .io.ffmpeg_writer import ffmpeg_write_image, ffmpeg_write_video
     21 from .io.ffmpeg_tools import ffmpeg_merge_video_audio
     22 from .io.gif_writers import (write_gif,

C:\Program Files\Anaconda3\lib\site-packages\moviepy\video\io\ffmpeg_writer.py in <module>()
     13     DEVNULL = open(os.devnull, 'wb')
     14 
---> 15 from moviepy.config import get_setting
     16 from moviepy.tools import verbose_print
     17 

C:\Program Files\Anaconda3\lib\site-packages\moviepy\config.py in <module>()
     49     success, err = try_cmd([FFMPEG_BINARY])
     50     if not success:
---> 51         raise IOError(err.message +
     52                  "The path specified for the ffmpeg binary might be wrong")
     53 

AttributeError: 'PermissionError' object has no attribute 'message'

Python版本信息

Python 3.5.2 |Anaconda custom (64-bit)| (default, Jul  5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

在控制台中运行ffmpeg -version会给我

ffmpeg version N-83507-g8fa18e0 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-zlib
libavutil      55. 47.100 / 55. 47.100
libavcodec     57. 80.100 / 57. 80.100
libavformat    57. 66.102 / 57. 66.102
libavdevice    57.  2.100 / 57.  2.100
libavfilter     6. 73.100 /  6. 73.100
libswscale      4.  3.101 /  4.  3.101
libswresample   2.  4.100 /  2.  4.100
libpostproc    54.  2.100 / 54.  2.100

我正在运行64位版本的Windows 10。

我无法在任何地方找到任何解决方案,这让我疯狂!好像它没有找到ffmpeg二进制文件,但我把它放在C:\ ffmpeg \ bin中并将其添加到路径环境变量中。遵循here的指示。

1 个答案:

答案 0 :(得分:0)

我今晚必须自己解决这个问题。此错误有两个部分:

1&GT;在Python 3中,message属性不再存在于异常对象上,并且

2 - ;正如你猜测的那样,你需要告诉MoviePy FFMpeg在哪里

要解决err.message属性错误,您可以将其替换为str(err)

    raise IOError(str(err) + 
             "The path specified for the ffmpeg binary might be wrong")

真正的解决方案是确保MoviePy知道FFMpeg的位置。查看moviepy\config_defaults.py文件,查看其对FFMPEG_BINARY的说明。默认值为os.getenv('FFMPEG_BINARY', 'ffmpeg-imageio'),这意味着它将第一个值视为包含FFMpeg可执行文件路径的环境变量,如果未找到,则使用第二个值。那意味着它应该使用imageio模块安装的FFMpeg。

由于您已经在计算机上的某处安装了FFMpeg,您只需将config_defaults.py中的FFMPEG_BINARY变量设置为指向它:

FFMPEG_BINARY = "c:\FFMPEG\ffmpeg.exe" # where ever it is on your system

或者您可以使用该值创建环境变量。

如果您还没有安装FFMpeg,可以通过ImageIO安装它,ImageIO是MoviePy使用和安装的模块。在MoviePy install instructions中,他们提到应该由ImageIO自动安装FFMpeg,但这对我来说并非如此。当它导致错误时,它会为您提供手动安装的说明:

imageio.core.fetching.NeedDownloadError: Need ffmpeg exe. You can download it by calling:
  imageio.plugins.ffmpeg.download()

这就是我所做的,并且没有必要为此编辑config_defaults.py。我还没有使用过Anaconda,但我在WinPython这样做,这是另一种Python一体化版本。

我遇到此错误的原因是我错误地输入了config_defaults.py中ImageMagick的路径,导致&#34;引发&#34;要运行的分支,公开Python 2代码以设置err.message。

希望这个迂回的故事可以帮助你或其他任何人。