近期运行一个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 "……AppData\Local\Programs\Python\Python36\lib\site-packages\moviepy\video\io\VideoFileClip.py", line 91, in __init__
fps_source=fps_source)
File "……\AppData\Local\Programs\Python\Python36\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 33, in __init__
fps_source)
File "……\AppData\Local\Programs\Python\Python36\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 256, in ffmpeg_parse_infos
proc = sp.Popen(cmd, **popen_params)
File "……\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 709, in __init__
restore_signals, start_new_session)
File "……\AppData\Local\Programs\Python\Python36\lib\subprocess.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下载到本地,

AppData\Local\imageio\ffmpeg\ffmpeg-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替换原来的AppData\Local\imageio\ffmpeg\ffmpeg-win32-v3.2.4.exe, 再次运行clip = VideoFileClip("a.mp4"),成功执行!

原创:解决 python中moviepy调用ffmpeg的错误:subprocess, PermissionError: [WinError 5] 拒绝访问的更多相关文章

  1. windows 安装python pip Could not install packages due to anEnvironmentError: [WinError 5] 拒绝访问

    找打 C:\Windows\System32 文件夹下面的cmd.exe点开后运行python -m pip install --upgrade pip 即解决问题了.

  2. python 使用 'python -m pip install --upgrade pip'提示PermissionError: [WinError 5] 拒绝访问

    执行pip install --upgrade pip 提示"PermissionError: [WinError 5] 拒绝访问",如下图,由于更新的用户权限不够,换成管理员运行 ...

  3. python中如何调用函数交换两个变量的值

    python中如何调用函数交换两个变量的值 所有代码来在python3.7.1版本实现 以下实例通过用户输入两个变量,并相互交换:  方法一: def swap(a,b): # 创建临时变量,并交换 ...

  4. python常用模块-调用系统命令模块(subprocess)

    python常用模块-调用系统命令模块(subprocess) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. subproces基本上就是为了取代os.system和os.spaw ...

  5. python下载报错:Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问

    更新pip模块的版本:python -m pip install --upgrade pip 但是遇到报错提示: Could not install packages due to an Enviro ...

  6. 剖析和解决Python中网络粘包的正确姿势

    目录 1.粘包及其成因 1.1.粘包产生 1.2.粘包产生的原因 2.尝试解决粘包 2.1.指定数据包的长度 2.2.固定数据包的长度 2.3.用函数实现多次调用发送数据 3.解决粘包问题的正确姿势 ...

  7. 解决python中json模块loads出来的结构都是unicode的问题

    在使用python的json模块对json字串反序列化成python对象的时候出现的字符串都是unicode类型,而不是python内置的str类型.在某种使用场景下用户必须做显式的转换才能正常使用, ...

  8. 解决 python 中,时间日期不能序列化的问题

    在python 中, 你在数据库娶到了数据中如果含有时间日期,那么你在向前端作为json对象传递的时候呢,就会报错.大致如下: TypeError: datetime.datetime(2017, 1 ...

  9. 解决python中调用 imread 报错:ImportError: cannot import name imread

    安装了scipy后,报cannot import name imread错误, 1.网上查阅资料后说是需要安装pillow,安装pillow之后,仍然报该错误, 2.网上说是pillow与SciPy安 ...

随机推荐

  1. mtd-utils 工具的使用

    mtd_debug [root@xmos /root]# mtd_debugusage: mtd_debug info <device>       mtd_debug read < ...

  2. [置顶] kubernetes资源类型--持久化存储Persistent Volume和Persistent Volume Claim

    概念 存储管理跟计算管理是两个不同的问题.理解每个存储系统是一件复杂的事情,特别是对于普通用户来说,有时并不需要关心各种存储实现,只希望能够安全可靠地存储数据. 为了简化对存储调度,K8S对存储的供应 ...

  3. Http协议三次握手过程

    Http协议三次握手过程   TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...

  4. iOS小技巧 - 如何使UIView可以绑定点击事件

    让我们这次直接进入正题,有时候我们想做以下这种界面: 目前我就想到三种方案: 做一个tableview,然后组织cell的界面如上图所示 做一个button子类,使得button的界面能如上图所示 做 ...

  5. 怎么将JSP页面的ID值传给Action进行更新和删除

    这里只是单纯的SH整合. JSP页面代码 <!-- value=action中数据库的User对象集合list必须和action定义的名字一样, 且为了在这里能够访问,需要生成get/set方法 ...

  6. MySQL日期函数的用法几则

    1.将Date类型变成年月日时分秒的形式 select date_format(claimDate,'%Y-%m-%d %H:%i:%s') as claimdate from t1 2.只要年月日的 ...

  7. MySql中文乱码问题(3)

    MySql的client是在dos界面上,然而dos界面默认的字符集编码方式是:GBK (1).MySql字符转换原理图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi ...

  8. SSRF漏洞的挖掘经验

    本文转自:https://sobug.com/article/detail/11 SSRF概述 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造 ...

  9. 仿百度壁纸client(六)——完结篇之Gallery画廊实现壁纸预览已经项目细节优化

    仿百度壁纸client(六)--完结篇之Gallery画廊实现壁纸预览已经项目细节优化 百度壁纸系列 仿百度壁纸client(一)--主框架搭建,自己定义Tab + ViewPager + Fragm ...

  10. jquery ui widget 源代码分析

    jquery ui 的全部组件都是基于一个简单,可重用的widget. 这个widget是jquery ui的核心部分,有用它能实现一致的API.创建有状态的插件,而无需关心插件的内部转换. $.wi ...