2

Chaquopyを使用してAndroidアプリでPythonコードを実行しようとしています.movi​​epyライブラリも使用しています(mp4ファイルをgifファイルに変換しています)。変換しようとすると、次のエラー メッセージが表示されます。

2019-02-06 15:46:47.586 3924-3924/com.udacity.gradle.builditbigger E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.udacity.gradle.builditbigger, PID: 3924
com.chaquo.python.PyException: AttributeError: module 'moviepy.audio.fx.all' has no attribute 'audio_fadein'
    at <python>.moviepy.editor.<module>(<string>:1)
    at <python>.moviepy.editor.<module>(editor.py:80)
    at <python>.java.android.importer.load_module_impl(importer.py:435)
    at <python>.java.android.importer.load_module(importer.py:353)
    at <python>.importlib._bootstrap._load_backward_compatible(<frozen importlib._bootstrap>:626)
    at <python>.importlib._bootstrap._load_unlocked(<frozen importlib._bootstrap>:656)
    at <python>.importlib._bootstrap._find_and_load_unlocked(<frozen importlib._bootstrap>:955)
    at <python>.importlib._bootstrap._find_and_load(<frozen importlib._bootstrap>:971)
    at <python>.java.chaquopy.import_override(import.pxi:18)
    at <python>.gif_convert.<module>(gif_convert.py:1)
    at <python>.java.android.importer.load_module_impl(importer.py:435)
    at <python>.java.android.importer.load_module(importer.py:353)
    at <python>.importlib._bootstrap._load_backward_compatible(<frozen importlib._bootstrap>:626)
    at <python>.importlib._bootstrap._load_unlocked(<frozen importlib._bootstrap>:656)
    at <python>.importlib._bootstrap._find_and_load_unlocked(<frozen importlib._bootstrap>:955)
    at <python>.importlib._bootstrap._find_and_load(<frozen importlib._bootstrap>:971)
    at <python>.importlib._bootstrap._gcd_import(<frozen importlib._bootstrap>:994)
    at <python>.importlib.import_module(__init__.py:126)
    at <python>.chaquopy_java.Java_com_chaquo_python_Python_getModule(chaquopy_java.pyx:154)
    at com.chaquo.python.Python.getModule(Native Method)
    at com.udacity.gradle.builditbigger.newPost.visualMediaPost.VisualMediaPostFragment.moveFile(VisualMediaPostFragment.java:247)
    at com.udacity.gradle.builditbigger.camera.LifeCycleCamera.getFilePath(LifeCycleCamera.java:1161)
    at com.udacity.gradle.builditbigger.camera.LifeCycleCamera.stopRecordingVideo(LifeCycleCamera.java:1078)
    at com.udacity.gradle.builditbigger.newPost.visualMediaPost.VisualMediaPostFragment.lambda$onCreateView$5(VisualMediaPostFragment.java:162)
    at com.udacity.gradle.builditbigger.newPost.visualMediaPost.-$$Lambda$VisualMediaPostFragment$WS1G2y9p8sE-re_eOWFa7Rr0OCU.onClick(Unknown Source:4)
    at android.view.View.performClick(View.java:6897)
    at android.view.View$PerformClick.run(View.java:26089)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6940)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

この問題の修正を見つけました (通常は Android Studio によって生成されるPython コードを変更する必要があるため、Python ファイルに加えられた変更はビルド時に上書きされます。

Pythonコードを以下に示します

from moviepy.editor import VideoFileClip

def convert(path):
    clip = VideoFileClip(path)
    return clip.write_gif("output.gif", fps=24)

pyhton コードを開始するために使用される Java コード:

Python.start(new AndroidPlatform(getActivity()));
        Python py = Python.getInstance();
        PyObject gifConvert = py.getModule("gif_convert");
        PyObject gif = gifConvert.callAttr("convert", file.getAbsolutePath());
        Log.i("gif type", gif.toString());

どんな助けでも大歓迎です。

4

1 に答える 1