Python 从moviepy:AttributeError:';导入视频文件剪辑时出错;许可错误';对象没有属性';消息';

Python 从moviepy:AttributeError:';导入视频文件剪辑时出错;许可错误';对象没有属性';消息';,python,windows,python-3.x,ffmpeg,anaconda,Python,Windows,Python 3.x,Ffmpeg,Anaconda,我用的是jupyter笔记本。我也尝试过从水蟒控制台 尝试使用以下两种方式导入 from moviepy.editor import VideoFileClip from moviepy.video.io.VideoFileClip import VideoFileClip 他们两个都给了我同样的错误。下面是完整的跟踪 AttributeError Traceback (most recent call last) <ipython

我用的是jupyter笔记本。我也尝试过从水蟒控制台

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

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'
在控制台中运行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中,并将其添加到path环境变量中。按照。

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

1> 在Python3中,异常对象上不再存在
message
属性,并且

2> 正如您所猜测的,您需要告诉MoviePy FFMpeg在哪里

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

但真正的解决方案是确保MoviePy知道FFMpeg在哪里。查看您的
moviepy\config\u defaults.py
文件,查看它对
FFMPEG\u二进制文件的说明。默认值是
os.getenv('FFMPEG\u BINARY','FFMPEG imageio')
,这意味着它将把第一个值作为包含FFMPEG可执行文件路径的环境变量,如果找不到,将使用第二个值。这意味着它应该使用由
imageio
模块安装的FFMpeg

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

FFMPEG_BINARY = "c:\FFMPEG\ffmpeg.exe" # where ever it is on your system
或者您可以创建一个具有该值的环境变量

如果您没有安装FFMpeg,可以通过ImageIO安装它,ImageIO是MoviePy使用和安装的模块。在文章中,他们提到FFMpeg应该由ImageIO自动安装,但我没有这样做。当它导致错误时,它会指示您手动安装:

imageio.core.fetching.NeedDownloadError: Need ffmpeg exe. You can download it by calling:
  imageio.plugins.ffmpeg.download()
这就是我所做的,并且不必为此编辑
config\u defaults.py
。我没有使用Anaconda,但我正在使用另一种类型的Python多功能发行版

我遇到此错误的原因是我在
config_defaults.py
中错误地输入了ImageMagick的路径,导致运行“raise”分支,从而暴露Python 2代码以设置err.message


希望这个迂回的故事能帮助你或其他人。

我通过编辑config.py文件修复了它。其中有3个ffmpeg加载选项。它选错了。因此,我修改了代码,使其采用适当的代码:)
FFMPEG_BINARY = "c:\FFMPEG\ffmpeg.exe" # where ever it is on your system
imageio.core.fetching.NeedDownloadError: Need ffmpeg exe. You can download it by calling:
  imageio.plugins.ffmpeg.download()