2016-07-21 23 views
0

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

#!/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() 

答えて

1

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

pyinstallerに関する限り、moviepyのフックフォルダにフックが表示されず、フリーズされたバージョンにはバンドルされていない可能性があります。それを隠しインポートとして追加することができます。https://pythonhosted.org/PyInstaller/when-things-go-wrong.html?highlight=hidden#listing-hidden-imports

+0

ありがとうございます。エラーは「システムが指定されたパスを見つけることができません」ということです。moviepy \ video \ fxにつながりますので、moviepyはフリーズアプリに含まれていないようです。私はcx_freezeのセットアップスクリプトで指定していましたが、pyinstallerで同じことをしようとします。あなたが私の問題を解決する手段を私に提供して以来、私の質問に答えました。 –

関連する問題