[python]moviepyで「AttributeError: ‘module’ object has no attribute ‘audio_fadein’」が出る時の対処法

moviepy エラー対処法
プログラミング

moviepyをpyinstallerでexe化するとエラーがでる。

今動画変換ソフトを作っているんですけども、動画変換ロジックには「moviepy」というライブラリを使っています。

これを使って作ったpythonのファイルをpyinstallerでexe化しようとしました。

そうするとなんということでしょうエラーが、

「AttributeError: ‘module’ object has no attribute ‘audio_fadein’」というエラーがでました。

これの対処法が見つかりました。

AttributeError: ‘module’ object has no attribute ‘audio_fadein’はall_init_.pyファイルを書き換えれば解決

まずは\Lib\site-packages\moviepy\video\fx\all_init_.pyに書きコードをコピペ

"""
Loads all the fx !
Usage:
import moviepy.video.fx.all as vfx
clip = vfx.resize(some_clip, width=400)
clip = vfx.mirror_x(some_clip)
"""

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__:
#     exec("from ..%s import %s" % (name, name))

from moviepy.video.fx.accel_decel import accel_decel
from moviepy.video.fx.blackwhite import blackwhite
from moviepy.video.fx.blink import blink
from moviepy.video.fx.colorx import colorx
from moviepy.video.fx.crop import crop
from moviepy.video.fx.even_size import even_size
from moviepy.video.fx.fadein import fadein
from moviepy.video.fx.fadeout import fadeout
from moviepy.video.fx.freeze import freeze
from moviepy.video.fx.freeze_region import freeze_region
from moviepy.video.fx.gamma_corr import gamma_corr
from moviepy.video.fx.headblur import headblur
from moviepy.video.fx.invert_colors import invert_colors
from moviepy.video.fx.loop import loop
from moviepy.video.fx.lum_contrast import lum_contrast
from moviepy.video.fx.make_loopable import make_loopable
from moviepy.video.fx.margin import margin
from moviepy.video.fx.mask_and import mask_and
from moviepy.video.fx.mask_color import mask_color
from moviepy.video.fx.mask_or import mask_or
from moviepy.video.fx.mirror_x import mirror_x
from moviepy.video.fx.mirror_y import mirror_y
from moviepy.video.fx.painting import painting
from moviepy.video.fx.resize import resize
from moviepy.video.fx.rotate import rotate
from moviepy.video.fx.scroll import scroll
from moviepy.video.fx.speedx import speedx
from moviepy.video.fx.supersample import supersample
from moviepy.video.fx.time_mirror import time_mirror
from moviepy.video.fx.time_symmetrize import time_symmetrize

次に\Lib\site-packages\moviepy\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))

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

その後再度pyinstallerでexe化してみます。

するとなんということでしょう。匠の手によって(略

これが今回作った動画圧縮ソフトです。

原因はfor文でのimport

今編集した元々のimport文の中にfor文で全部インポートしている部分があります。(コピペ用コードでは下記のようにコメントアウトしている部分です。)

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

どうやらこれが悪い子だったようです。

なので単にforを使わず、全部ちゃんとimport文で書いてやったわけです。

めでたしめでたし。

と思ったんですけど、この方法ってmoviepyがアップデートされたらまたやり直しになるんですかね?

ダルゥ

コメント

タイトルとURLをコピーしました