Auch passen da einige Local/Global Zuweisungen nicht.
Vom Prinzip würde ich denken das es so funktionieren müsste, bin mir aber nicht sicher da ich wie gesagt nicht testen kann:
AutoIt
Opt('MustDeclareVars', 1)
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <GuiEdit.au3>
Global $PID_ff, $Time
Global $hGUI = GUICreate("Spieldauer anzeigen", 1000, 500, -1, -1)
Global $StartButton = GUICtrlCreateButton("Video wählen", 10, 10, 100, 30)
Global $laufendeabspielzeit = GUICtrlCreateInput("", 120, 15, 100, 20, $ES_READONLY)
Global $Filmdauer = GUICtrlCreateInput("", 230, 15, 100, 20, $ES_READONLY)
Global $Edit1 = GUICtrlCreateEdit("", 10, 50, 980, 440)
GUICtrlSetData(-1, "")
_GUICtrlEdit_SetLimitText($Edit1, -1) ;kein Limit -1
GUISetState(@SW_SHOW, $hGUI)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $StartButton
$PID_ff = _Filmlaenge()
Case $laufendeabspielzeit
Case $Filmdauer
Case $Edit1
Case Else ;Die Zeit aktualisieren - ggf. zu häufig (10* je Sek.), bitte prüfen
if not ProcessExists('ffprobe.exe') then Continueloop
$Time = StringRegExp(StdoutRead($PID_ff), '^\d*.\d{2}', $STR_REGEXPARRAYMATCH)[0]
If StringinStr($Time, 'A-V:') then GUICtrlSetData($laufendeabspielzeit, $Time)
EndSwitch
sleep(100); Offset für nicht zu häufiges Abfragen
WEnd
Func _Filmlaenge()
Local $sFilmlaenge, $line, $filmlength = ""
Local Const $sinput = @ScriptDir & "\film1.mp4" ; FileOpenDialog("Wähle ein Video aus", @ScriptDir, "Datei (*.mp4;*.*;*;)", 1)
Local Const $iPID = Run(@ComSpec & ' /c ffplay -stats ' & """" & $sinput & """", @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
Local Const $cmd = 'ffprobe.exe ' & '"' & $sinput & '"' & ' 2>&1 | findstr Duration' ; ermittelt die Filmlänge des Filmes
Local Const $handle = Run(@ComSpec & ' /c ' & $cmd, '', @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
While True
$line = StdoutRead($handle)
If @error Then ExitLoop
$filmlength &= StringStripWS($line, 8)
$line &= StdoutRead($handle)
WEnd
ProcessWaitClose($handle)
$sFilmlaenge = StringRegExpReplace($filmlength, ".*Duration:(\d+:\d+:\d+).*", "$1") ; Extrahiere die Filmlänge
GUICtrlSetData($Filmdauer, $sFilmlaenge)
Return $iPID
EndFunc
Alles anzeigen