ffmpeg progress bar ?

  • 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...

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $sStdErr = ""
    $iTicksDuration = 0
    $iTicksTime = 0

    [/autoit] [autoit][/autoit] [autoit]

    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()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit]