近期運行一個python程序用到了moviepy.editor.VideoFileClip()
moviepy基於ffmpeg,可是並非pip安裝的ffmepg,
執行html
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.python
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位機器上運行。
git
搞清楚了原理,直接去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")
,成功執行!github