關於moviepy打包報錯AttributeError: module audio/video.fx.all has no attribute fadein、crop文章的糾錯和抄襲

老猿前面有篇文章《moviepy應用pyinstaller打包後執行報錯AttributeError: module audio/video.fx.all has no attribute ‘fadein’、crop》,今天居然發現有人原文照抄還獲了很多個贊,而老猿的原文居然還沒有贊。抄襲文章鏈接爲:https://www.pythonheidong.com/blog/article/314732/。並且這篇文章今天仔細覈對了一下,還有錯誤,在此更正一下。

原文解決辦法部分,“如針對audio.fx.all,在Python中手工執行如下代碼:”

import pkgutil

import moviepy.video.fx as fx

__all__ = [name for _, name, _ in pkgutil.iter_modules(fx.__path__) if name != "all"]
for name in __all__: 
	print("from  moviepy.video.fx import %s" % (name))


實際上這個地方應該這樣處理:

>>> import pkgutil
>>> import moviepy.audio.fx as fx
>>> __all__ = [name for _, name, _ in pkgutil.iter_modules(
    fx.__path__) if name != "all"]
>>> for name in __all__: 
	print("from  moviepy.audio.fx import %s" % (name))

	
from  moviepy.audio.fx import audio_fadein
from  moviepy.audio.fx import audio_fadeout
from  moviepy.audio.fx import audio_left_right
from  moviepy.audio.fx import audio_loop
from  moviepy.audio.fx import audio_normalize
from  moviepy.audio.fx import volumex
>>> 

將上面的輸出語句拷貝到audio.fx.all的__init__.py,替換被註釋的2行代碼即可。如movipy1.03的版本中,拷貝到audio.fx.all的__init__.py文件後,該文件內容爲如下:

"""
Loads all the fx !
Usage:
import moviepy.audio.fx.all as afx
audio_clip = afx.volume_x(some_clip, .5)
"""

import pkgutil

import moviepy.audio.fx as fx

__all__ = [name for _, name, _ in pkgutil.iter_modules(
    fx.__path__) if name != "all"]

#for name in __all__:
    exec("from ..%s import %s" % (name, name))
#for name in __all__: 
#	print("from  moviepy.audio.fx import %s" % (name))

from  moviepy.audio.fx import audio_fadein
from  moviepy.audio.fx import audio_fadeout
from  moviepy.audio.fx import audio_left_right
from  moviepy.audio.fx import audio_loop
from  moviepy.audio.fx import audio_normalize
from  moviepy.audio.fx import volumex

跟老猿學Python、學5G!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章