Hallo,
ich habe folgendes Problem, vielleicht könnt Ihr mir helfen.
Ich habe diesen Code mit dem ich per ffprobe die Duration der mp4 ermittle und in das Imputfeld $sFilmlaenge schreibe.
Mit ffplay stelle ich das Video dar.
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <GuiEdit.au3>
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)
Local $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
_Filmlaenge()
Case $laufendeabspielzeit
Case $Filmdauer
Case $Edit1
EndSwitch
WEnd
Func _Filmlaenge()
Global $sinput = @ScriptDir & "\film1.mp4" ; FileOpenDialog("Wähle ein Video aus", @ScriptDir, "Datei (*.mp4;*.*;*;)", 1)
Local $iPID = Run(@ComSpec & ' /c ffplay -stats ' & """" & $sinput & """", @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
$filmlength = ""
Local $cmd = 'ffprobe.exe ' & '"' & $sinput & '"' & ' 2>&1 | findstr Duration' ; ermittelt die Filmlänge des Filmes
$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)
GUICtrlSetData($Edit1, StdoutRead($line))
WEnd
ProcessWaitClose($handle)
Global $sFilmlaenge = StringRegExpReplace($filmlength, ".*Duration:(\d+:\d+:\d+).*", "$1") ; Extrahiere die Filmlänge
GUICtrlSetData($Filmdauer, $sFilmlaenge)
;~ GUICtrlSetData($Edit1, StdoutRead($iPID))
EndFunc
Alles anzeigen
Mein Problem ist, das ich die Daten in der Autoikonsole, die, während das Video läuft, nicht erfassen kann.
Als Test wollte ich dies in dem Editfeld darstellen, funktioniert aber nicht.
Mein Anliegen ist, dass ich nur Zahlen vor A-V: erfassen will und in das Imputfeld $laufendeabspielzeit einlese.
Sinn und Zweck ist, das man dann im Inputfeld laufendeabspielzeit die bereits abgelaufende Zeit des Videos sieht.
Wenn man die rechte/linke Pfeiltaste drückt springt das Video 10 Sekunden vor/zurück.
Man kann auch mit der rechten Maustaste sich durch das Video bewegen.
Ausschnitt aus der Autoitkonsole:
0.88 A-V: -0.021 fd= 0 aq= 9KB vq= 11KB sq= 0B f=0/0
0.93 A-V: -0.021 fd= 0 aq= 9KB vq= 10KB sq= 0B f=0/0
0.97 A-V: -0.018 fd= 0 aq= 9KB vq= 8KB sq= 0B f=0/0
1.02 A-V: -0.017 fd= 0 aq= 9KB vq= 8KB sq= 0B f=0/0
1.07 A-V: -0.016 fd= 0 aq= 9KB vq= 7KB sq= 0B f=0/0
1.11 A-V: -0.016 fd= 0 aq= 9KB vq= 7KB sq= 0B f=0/0
16.72 A-V: -0.062 fd= 0 aq= 9KB vq= 35KB sq= 0B f=0/0
16.75 A-V: -0.059 fd= 0 aq= 8KB vq= 35KB sq= 0B f=0/0
16.80 A-V: -0.012 fd= 0 aq= 8KB vq= 35KB sq= 0B f=0/0
16.84 A-V: -0.022 fd= 0 aq= 9KB vq= 53KB sq= 0B f=0/0
16.87 A-V: -0.023 fd= 0 aq= 9KB vq= 53KB sq= 0B f=0/0
16.90 A-V: -0.024 fd= 0 aq= 8KB vq= 50KB sq= 0B f=0/0
16.95 A-V: -0.011 fd= 0 aq= 8KB vq= 49KB sq= 0B f=0/0
usw...
Alles anzeigen
Vielen Dank schon einmal für Eure Hilfe