Videovorschau-Bild

  • Hi

    folgendes Script erzeugt ein Jpg mit 9 Vorschaubildern eines Videos:
    autoit.de/wcf/attachment/4314/

    Dazu benötigt man ffmpeg.exe:
    http://www.videohelp.com/download/ffmpeg-0.5.7z

    Das Script kompilieren und dann via drag´n´drop ein/mehrere Videodateien auf die Exe ziehen...

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <Misc.au3>
    _Singleton("ffmpeg thumbnail generator")
    #include <Date.au3>
    #include <GdiPlus.au3>

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

    If $Cmdline[0] < 1 Then Exit
    $hGui = GUICreate("ffmpeg thumb generator", 150, 55, -1, -1, -1, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    $hProgress1 = GUICtrlCreateProgress(5, 5, 140, 20, 0x1)
    $hProgress2 = GUICtrlCreateProgress(5, 30, 140, 20, 0x1)
    GUISetState()

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

    _GDIPlus_Startup()
    For $i = 1 To $Cmdline[0]
    DirRemove(@ScriptDir & "\ffmpegthumbtemp", 1)
    DirCreate(@ScriptDir & "\ffmpegthumbtemp")
    $sMovieFile = $Cmdline[$i]
    $iTicks = _CheckMovieLength($sMovieFile)
    If $iTicks = 0 Then $iTicks = 20000
    GUICtrlSetData($hProgress1, $i * 100 / $Cmdline[0])
    _CreateThumbnails($sMovieFile, $iTicks)
    Next
    DirRemove(@ScriptDir & "\ffmpegthumbtemp", 1)
    _GDIPlus_Shutdown()

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

    Func _CreateThumbnails($sMovieFile, $iTicks)
    Local $tempGraph = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
    Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics(520, 400, $tempGraph)
    _GDIPlus_GraphicsDispose($tempGraph)
    Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsClear($hGraphics, 0xFFFFFFFF)
    Local $h, $m, $s, $hImage, $iCnt = 0
    _TicksToTime($iTicks, $h, $m, $s)
    For $i = 0 To 2
    For $j = 0 To 2
    $iCnt += 1
    _TicksToTime(($iCnt * 10 * $iTicks) / 100, $h, $m, $s)
    GUICtrlSetData($hProgress2, $iCnt * 100 / 9)
    RunWait('"' & @ScriptDir & '\ffmpeg.exe" -ss ' & $h & ':' & $m & ':' & $s & ' -vframes 1 -i "' & $sMovieFile & '" -s 160×120 -an -r 0.05 -y "' & @ScriptDir & '\ffmpegthumbtemp\' & $iCnt & '%d.jpg"', @ScriptDir, @SW_HIDE)
    $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\ffmpegthumbtemp\" & $iCnt & "1.jpg")
    _GDIPlus_GraphicsDrawImage($hGraphics, $hImage, 10 + $i * 170, 10 + $j * 130)
    _GDIPlus_ImageDispose($hImage)
    Next
    Next
    _GDIPlus_ImageSaveToFile($hBitmap, StringLeft($sMovieFile, StringInStr($sMovieFile, ".", 0, -1)) & 'jpg')
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    EndFunc ;==>_CreateThumbnails

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

    Func _CheckMovieLength($sMovieFile)
    Local $sFFmpeg = ""
    Local $hFFmpeg = Run('ffmpeg.exe -i "' & $sMovieFile & '"', @ScriptDir, @SW_HIDE, 0x4)
    While 1
    $sFFmpeg &= StderrRead($hFFmpeg)
    If @error Then ExitLoop
    WEnd
    $sFFmpeg = StringLeft(StringTrimLeft($sFFmpeg, StringInStr($sFFmpeg, "Duration:") + 9), 8)
    Local $iTicks = _TimeToTicks(StringLeft($sFFmpeg, 2), StringMid($sFFmpeg, 4, 2), StringMid($sFFmpeg, 7, 2))
    Return $iTicks
    EndFunc ;==>_CheckMovieLength

    [/autoit]

    lgE

  • hi.

    Hört sich ja cool an dieses script, doch leider funktioniert es bei mir nicht 100%.

    Das Bild wird erstellt, jedoch bleibt es weiss...


    Habe XP Pro.
    Ist was an der ffmpeg.exe anders?


    greet;s heisabrutalo