原創:解決 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 "……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"),成功執行!


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com