0

moviepy を使用してメディア ファイルの長さを取得するアプリを Python 2.7 で作成しました。コマンドラインから実行すると、すべて正常に動作します。しかし、コードをフリーズした後、実行するとコンソール ウィンドウがすぐに閉じます。cx_freeze、pyinstaller、py2exe を試しましたが、すべて同じ結果でした。私のコードに何か問題がありますか、それともmoviepyの問題ですか? Windows 10でテストしていますが、これは最終的にWindows 7で使用されます。コードは次のとおりです。

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Video-Audio Length Retriever
#
# Version: 0719A
#
# Author: Simon Lachaîne


import codecs
from moviepy.editor import VideoFileClip, AudioFileClip
import os


directories = []


def read_directories():
    global directories
    directories_txt = raw_input("Enter the path and name of the text file containing the source directories: ")

    with codecs.open(directories_txt, "r", encoding="utf8") as source_dirs:
        directories = [line.rstrip() for line in source_dirs]


def write_text(report, text2save):
    with open(report, "a") as report:
        report.write(text2save)


def check_duration():
    for directory in directories:
        for root, dirs, files in os.walk(directory):
            os.chdir(root)
            for fichier in files:

                try:
                    video = VideoFileClip(fichier)

                    m, s = divmod(video.duration, 60)
                    h, m = divmod(m, 60)

                    length = fichier + " ; " + "%02d:%02d:%02d\n" % (h, m, s)
                    write_text(durations_report, length)
                    print "Processed file " + fichier

                except IOError:
                    pass

                except KeyError:
                    try:
                        audio = AudioFileClip(fichier)

                        m, s = divmod(audio.duration, 60)
                        h, m = divmod(m, 60)

                        length = fichier + " ; " + "%02d:%02d:%02d\n" % (h, m, s)
                        write_text(durations_report, length)
                        print "Processed file " + fichier

                    except IOError:
                        pass


read_directories()
durations_report = raw_input("Enter the path and name of the report to create: ")
check_duration()
4

1 に答える 1

1

フリーズしたコードをコマンド ラインから実行して、エラー メッセージを表示できます。

pyinstaller に関する限り、moviepy のフック フォルダーにフックが表示されません。おそらく、これは凍結バージョンにバンドルされていませんでした。それ(または不足している可能性のあるもの)を非表示のインポートとして追加できます:https://pythonhosted.org/PyInstaller/when-things-go-wrong.html?highlight=hidden#listing-hidden-imports

于 2016-07-22T13:20:25.350 に答える