Hey Leute,
Wie man die ffmpeg.exe ansteuert um daten zu konvertieren habe ich verstanden
nur wie kann ich jetzt den status des konvertierens in einer progress bar anzeigen lassen ?
Danke schonmal ![]()
clonker
Hey Leute,
Wie man die ffmpeg.exe ansteuert um daten zu konvertieren habe ich verstanden
nur wie kann ich jetzt den status des konvertierens in einer progress bar anzeigen lassen ?
Danke schonmal ![]()
clonker
evtl. haben nicht alle Verionen von FFMpeg den gleichen Output - dann musst du die Funktionen etwas anpassen...
#include <Date.au3>
[/autoit] [autoit][/autoit] [autoit]$sStdErr = ""
$iTicksDuration = 0
$iTicksTime = 0
ProgressOn("FFMpeg", "FFMpeg")
[/autoit] [autoit][/autoit] [autoit]$hPid = Run(@ScriptDir & '\ffmpeg.exe -y -i test.wav -ab 128k -ar 44100 test.mp3', @ScriptDir, @SW_HIDE, 4)
While 1
$sStdErr &= StderrRead($hPid)
If @error Then ExitLoop
If StringLen($sStdErr) > 0 Then
If Not $iTicksDuration Then $iTicksDuration = _GetDuration($sStdErr)
$iTicksTime = _GetTime($sStdErr)
If Not @error Then $sStdErr = ""
ProgressSet($iTicksTime * 100 / $iTicksDuration)
EndIf
WEnd
ProgressOff()
Func _GetDuration($sStdErr)
If Not StringInStr($sStdErr, "Duration:") Then Return SetError(1, 0, 0)
Local $aRegExp = StringRegExp($sStdErr, "(?i)Duration.+?([0-9:]+)", 3)
If @error Or Not IsArray($aRegExp) Then Return SetError(1, 0, 0)
Local $sTime = $aRegExp[UBound($aRegExp) - 1]
Local $aTime = StringSplit($sTime, ":", 2)
If @error Or Not IsArray($aTime) Then Return SetError(1, 0, 0)
Return _TimeToTicks($aTime[0], $aTime[1], $aTime[2])
EndFunc ;==>_GetDuration
Func _GetTime($sStdErr)
If Not StringInStr($sStdErr, "time=") Then Return SetError(1, 0, "")
Local $aRegExp = StringRegExp($sStdErr, "(?i)time=\h*([0-9]+)", 3)
If @error Or Not IsArray($aRegExp) Then Return SetError(1, 0, "")
Local $sTime = $aRegExp[UBound($aRegExp) - 1]
Return _TimeToTicks(0, 0, $sTime)
EndFunc ;==>_GetTime