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