私はPythonが比較的新しく、明らかにスタックオーバーフローが初めてです。私の目標は、簡単に解析できるコーデック、サイズ、ビットレート、解像度など、ライブラリ内のビデオ ファイルに関する情報を含むファイルを作成することです。この情報を使用して、見栄えの良いエンコードに置き換えるのに十分な品質のビデオ ファイルを判断する予定です。
sourceforge でMediaInfoを見つけました。私のスクリプトは、特定のディレクトリを再帰的に走査し、サブプロセスを介して MediaInfo を呼び出します。Windows のアクセス許可エラーを回避する方法を説明している、stackoverflowのこのスレッドのおかげで、以前のバグを解決しました。また、このスレッドのコードを実装して、サブプロセスへの呼び出しごとにインスタンス化された Windows コマンド プロンプト コンソールを非表示にしました。
現在、私のコードは次のエラーで失敗します:
returned non-zero exit status 1
私のスクリプトの現在の状態は以下のとおりです。前もって感謝します!
import os, subprocess
問題は、サブプロセスに渡される文字列をどのようにフォーマットしたかにあると推測します
types = [".avi", ".mp4", ".mkv"]
app = "MediaInfo.exe"
app_path = os.path.join("C:\Program Files\MediaInfo\MediaInfo_CLI_0.7.61_Windows_x64", app)
movie_dir = "L:\Movies"
current_file = ""
以下のコードは、コンソール ウィンドウなしでサブプロセスを起動します
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
メディアのディレクトリを再帰的に調べ、一致するファイルを分析します
for root, dirs, files in os.walk(movie_dir):
for filename in files:
for extension in types:
if (filename.endswith(extension)):
current_file = '"' + os.path.join(root, filename) + '"'
output = subprocess.check_output([app, current_file],
executable=app_path,
stderr=subprocess.STDOUT,
startupinfo=startupinfo)
print app_path, current_file, output #debug
with open("out.txt", "a") as f:
f.write(output)