So verwende ich Handbremse und Python, um Videos basierend auf einem Zeitplan zu kodieren. Ich muss den Fortschritt überwachen, weil ich damit die Codierungszeit einschätze. Dann kann ich es meinem Scheduler anpassen.Python Überwachung Fortschritt der Handbremse
Ich habe ein Problem, die ETA und% vollständig aus dem Prozess zu bekommen. Hier ist, was ich bis jetzt habe
profile = ["HandBrakeCLI","-i",input,"-o","output","-e","x264"]
cp = subprocess.Popen(profile, stderr=subprocess.PIPE, bufsize=1)
for line in iter(cp.stderr.readline, b''):
# regex match for % complete and ETA
matches = re.match(r'.*(\d+\.\d+)\s%.*ETA\s(\d+)h(\d+)m(\d+)s', line.decode('utf-8'))
if matches:
print(matches.group())
print(line),
cp.stderr.close()
cp.wait()
Es stimmt nicht überein, in der Tat bin ich nicht ganz sicher, was vor sich geht. Wenn ich mein Skript ausführen, sehe ich die ETA und% fertig Ausdruck
Encoding: task 1 of 1, 1.19 % (45.57 fps, avg 62.74 fps, ETA 00h08m01s)
Ich habe versucht, stdout verwenden, aber es funktioniert auch nicht.
Ich bin ziemlich sicher, das Problem ist, dass Handbrake CLI keine neuen zusätzlichen Zeilen jedes Mal, wenn der Prozess ein bisschen fortgeschritten ist, eher die bestehende Zeile ändert. Versuchen Sie, die Zeile unmittelbar nach 'for line in inter..' zu drucken und sehen Sie, was Sie tatsächlich erhalten. – advance512
würde mir das nicht geben die Ausgabe nach der For-Schleife beendet? also wenn der Prozess beendet ist? Ich möchte die Informationen erhalten, während der Prozess läuft. –
Zuerst iterieren Sie über stderr, vielleicht müssen Sie über stdout iterieren. Zweitens denke ich, dass cp.stderr.readline vollständige Zeilen aus dem Subprozess selbst zurückgeben würde, nicht eine einzige wiederholt aktualisierte Zeile. Ich würde die letzte Zeile nach dem 'Handbreak'-Prozess drucken, um zu sehen, wie es aussieht. Und, wie ich schon sagte, würde ich jede Zeile in der for-Schleife drucken, um zu verstehen, was ich tatsächlich erhalte. – advance512