zoukankan      html  css  js  c++  java
  • 原创:解决 python中moviepy调用ffmpeg的错误:subprocess, PermissionError: [WinError 5] 拒绝访问

    近期运行一个python程序用到了moviepy.editor.VideoFileClip()
    moviepy基于ffmpeg,但是并不是pip安装的ffmepg,
    执行

    import imageio
    from moviepy.editor import VideoFileClip
    clip = VideoFileClip("a.mp4")
    

    时报错,检查各项依赖都没问题,pip安装了所有的依赖包,还是一直报错如下,在stackoverflow上找到一个类似的问题,PermissionError: [WinError 5] Access is denied python using moviepy to write gif
    , 仔细看了修复办法,主要还是改为管理员权限尝试和安装ImageMagicK, 尝试之后也不管用,不过moviepy上确实也写了不依赖ImageMagicK.

    Traceback (most recent call last):
      File "testmodule.py", line 13, in <module>
    clip = VideoFileClip("a.mp4")
      File "……AppDataLocalProgramsPythonPython36libsite-packagesmoviepyvideoioVideoFileClip.py", line 91, in __init__
    fps_source=fps_source)
      File "……AppDataLocalProgramsPythonPython36libsite-packagesmoviepyvideoioffmpeg_reader.py", line 33, in __init__
    fps_source)
      File "……AppDataLocalProgramsPythonPython36libsite-packagesmoviepyvideoioffmpeg_reader.py", line 256, in ffmpeg_parse_infos
    proc = sp.Popen(cmd, **popen_params)
      File "……AppDataLocalProgramsPythonPython36libsubprocess.py", line 709, in __init__
    restore_signals, start_new_session)
      File "……AppDataLocalProgramsPythonPython36libsubprocess.py", line 997, in _execute_child
    startupinfo)
    PermissionError: [WinError 5] 拒绝访问。
    

    在之后仔细看了imageio的api设计,意识到ffmpeg用的是imageio包装的,和pip安装的ffmepg不同,使用VideoFileClip之前,有一个指令是ffmpegimageio.plugins.ffmpeg.download(),随时下载了一个包,通过设置参数ffmpegimageio.plugins.ffmpeg.download(None, True)强制重新下载,看到了文件从 https://github.com/imageio/imageio-binaries/raw/master/ffmpeg/ffmpeg-win32-v3.2.4.exe下载到本地,
    AppDataLocalimageioffmpegffmpeg-win32-v3.2.4.exe,有些诧异的是imageio选择下载的是32位文件,而我的pc是64位的,从github列表看到确实没有64位版本,

    而且双击执行ffmpeg-win32-v3.2.4.exe报错确实是没有权限,其实是32位程序不能在64位机器上运行

    搞清楚了原理,直接去ffmepg官网下载64位即可,链接是https://ffmpeg.org/download.html#build-windows,根据自己的机器平台,我则是下载ffmpeg-20180908-4cfb01d-win64-static.zip, 解压后将其中的ffmpeg.exe替换原来的AppDataLocalimageioffmpegffmpeg-win32-v3.2.4.exe, 再次运行clip = VideoFileClip("a.mp4"),成功执行!

  • 相关阅读:
    如何利用docker制作自己的镜像
    python 获取当前运行的 class 和 方法的名字
    UnitTest-case参数化
    值得推崇的一种图书出版的方式----开源图书
    Django中对数据查询、删除、修改
    wireshark网络实战分析二
    wireshark网络抓包分析
    邮件传输协议实战抓包分析
    socket服务端给客户端发送数据第一次不成功,第二次成功
    转载:Wireshark抓包详解
  • 原文地址:https://www.cnblogs.com/Deep-Learning/p/9615103.html
Copyright © 2011-2022 走看看