Arrays?? wie funktionieren sie??

  • Hi

    ich hab ein Problem und zwar mache ich ein programm zum aufnehmen von videos, momentan hab ich bei mir eingestellt das er mit 5 fps aufnimmt

    bei meinem freund habe ich es dann getestet mit 30 und da war es zu schnell als würde man vorspulen und bei ihm mit 5 war es zu langsam

    meine frage ist kann ich einstellen das er das automatisch die richtige fps einstellt??

    in zeile 55 kann man sie verändern. Vor @DesktopWidth.

    hier das skript

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <AVIWriter.au3>
    #include <File.au3>
    #include <ScreenCapture.au3>
    #include <SliderConstants.au3>
    #include <GUIListBox.au3>
    #include <EditConstants.au3>

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

    Global $Capture

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

    HotKeySet("^v", "_startvideo")
    HotKeySet("{ESC}", "_close")
    HotKeySet("^p")
    ;_StartAviLibrary()
    ;$avi = _CreateAvi("C:\Crocoframe\Videos\" & "\crocoframe.avi", 5,200,200)
    ;Break (0)
    IniWrite ("confic.ini", "C:\Crocoframe\" , "AVINAME", "crocoframe2")
    DirCreate("C:\Crocoframe\")
    DirCreate("C:\Crocoframe\Videos\")
    DirCreate("C:\Crocoframe\EasyScreen\")
    DirCreate("C:\Crocoframe\EasyScreen\Banner\")
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("CrocoFrame © CrocoJunk ", 548, 250, 192, 124)
    $Pic1 = GUICtrlCreatePic("", 0, 0, 545, 89, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    $Label1 = GUICtrlCreateLabel("Video aufnehmen", 8, 112, 87, 17)
    $Button1 = GUICtrlCreateButton("Play (STRG+V) ", 120, 112, 100, 25, $WS_GROUP)
    $Label3 = GUICtrlCreateLabel("Video stoppen", 8, 192, 72, 17)
    $Button3 = GUICtrlCreateButton("Video Beenden (ESC)", 120, 200, 120, 25, $WS_GROUP)
    $check = GUICtrlCreateCheckbox("Video starten nachdem aufgenommen", 256, 120, 193, 17)
    $check2 = GUICtrlCreateCheckbox("Video starten nach", 256, 168, 113, 17)
    $menu1 = GUICtrlCreateMenu("Datei")
    $item1 = GUICtrlCreateMenuItem("Optionen", $menu1)
    $item2 = GUICtrlCreateMenuItem("Easy Screen", $menu1)
    GUICtrlCreateInput("", 376, 168, 57, 21)
    $Label4 = GUICtrlCreateLabel("Sekunden", 448, 168, 53, 17)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    filedelete ("C:\Crocoframe\Videos\crocoframe.avi")
    If Not @error Then
    MsgBox(64, "Video", "Das Video startet jetz!")
    EndIf
    $Capture = True
    _StartAviLibrary()
    $avi = _CreateAvi("C:\Crocoframe\Videos\" & "\crocoframe.avi", 5, @DesktopWidth, @DesktopHeight)
    AdlibRegister("_close",30000) ;vorsichtshalber Buttons funktionieren nicht Hotkey ESC klappt aber
    ConsoleWrite("STARTED" & @CRLF)
    While $Capture
    $m = MouseGetPos()
    $hBmp = _ScreenCapture_Capture("", 0,0,-1,-1)
    _AddHBitmapToAvi($avi, $hBmp)
    _WinAPI_DeleteObject($hBmp)
    Sleep(200)
    WEnd
    ConsoleWrite("STOPPED" & @CRLF)
    AdlibUnRegister("_close")

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

    Case $Button3
    ConsoleWrite("STOP" & @CRLF)
    _close()
    Case $check
    if BitAND(GUICtrlRead($check), $GUI_CHECKED) = $GUI_CHECKED Then
    Run ("Windows Media Player.exe" & "C:\Crocoframe\Videos\crocoframe.avi")
    EndIf
    Case $check2
    Case $item1
    _optionen()
    Case $item2
    _screen()

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

    EndSwitch
    WEnd

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

    Func _startvideo()
    filedelete ("C:\Crocoframe\Videos\crocoframe.avi")
    If Not @error Then
    MsgBox(64, "Video", "Das Video startet jetz!")
    EndIf
    $Capture = True
    _StartAviLibrary()
    $avi = _CreateAvi("C:\Crocoframe\Videos\" & "\crocoframe.avi", 5, @DesktopWidth, @DesktopHeight)
    AdlibRegister("_close",30000) ;vorsichtshalber Buttons funktionieren nicht Hotkey ESC klappt aber
    ConsoleWrite("STARTED" & @CRLF)
    While $Capture
    $m = MouseGetPos()
    $hBmp = _ScreenCapture_Capture("", 0,0,-1,-1)
    _AddHBitmapToAvi($avi, $hBmp)
    _WinAPI_DeleteObject($hBmp)
    Sleep(200)
    WEnd
    ConsoleWrite("STOPPED" & @CRLF)
    AdlibUnRegister("_close")
    EndFunc

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

    Func _optionen()
    EndFunc
    Func _screen()
    EndFunc
    Func _close()
    _CloseAvi($avi)
    _StopAviLibrary()
    $Capture = False
    EndFunc

    [/autoit]

    3 Mal editiert, zuletzt von crocojunk (16. Juli 2010 um 18:46) aus folgendem Grund: Eine UDF hat gefehlt

  • Timerstarten
    1 Bild machen mit allem drum und dran
    Timer stoppen
    1 Sekunde / Gerundete Zeit = Bilder die Sekunde
    Habe grade kein SciTE zur Verfügung o.ä.

  • hä wie meinste das jetz
    1bild machen
    timer stoppen
    usw.

    versteh jetzt nicht was du damit meinst.

  • Spoiler anzeigen
    [autoit]

    Func _OptimaleFPS()
    $__hAvi = _CreateAvi(@TempDir & "\temp.avi", 1, @DesktopWidth, @DesktopHeight)

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

    $__hTimer = TimerInit()
    $__hBmp = _ScreenCapture_Capture()
    _AddHBitmapToAvi($__hAvi, $__hBmp)
    _WinAPI_DeleteObject($__hBmp)
    $__hTimerDiff = TimerDiff($__hTimer)
    _CloseAvi($__hAvi)
    FileDelete(@TempDir & "\temp.avi")
    Return $__FPS = Round(1000/$__hTimerDiff)
    EndFunc

    [/autoit]


    Habs nicht getestet. Aber so müsste es theoretisch funktionieren.

  • nein funzt nicht kommt volgendes error


    C:\Users\Patrik Finger\Desktop\CrocoFrame45.au3(132,16) : WARNING: $__FPS: possibly used before declaration.
    Return $__FPS =
    ~~~~~~~~~~~~~~~^
    C:\Users\Patrik Finger\Desktop\CrocoFrame45.au3(132,16) : ERROR: $__FPS: undeclared global variable.
    Return $__FPS =

  • Willst du die FPS nur messen oder einstellen?
    Wenn du sie nur messen willst dann geht das mit TimerInit, weil FPS = Bilder PRO Sekunde, wenn du die Zeit misst in der 1 Bild gemacht wird, kannst du dir ausrechnen, wieviele Bilder pro Sekunde gemacht werden (1000 / Timerdiff() ) wie mein Vorposter schon geschrieben hat..
    Wenn du die FPS steuern willst, wird das ganze etwas schwieriger, ich hätte da mit Sleep gearbeitet, aber mehr als (1000 / Zeit für ein Bild in Millisekunden) FPS wirst du nicht schaffen, und btw 5 FPS sind verdammt wenig, das menschliche Auge sieht eine Bewegung ab 23.97 FPS flüssig..

  • ich wollte es einstellen ich probier auch gerade wie ich das hinbekommen kann deswegen hatte ich hier um hilfe gebeten

  • Naja, du kannst dir ja mal die FPS anzeigen lassen (TrayTip zB)
    Wenn du die FPS einstellen willst, musst du das so machen:

    [autoit]


    $iFPS = 30 ; Das sind die gemessenen FPS
    $iFPSNew = 25 ; Das sind die FPS die du zum Schluss haben willst

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

    Func _CalcSleep($iFPSIn, $iFPSOut)
    Local $iSleep
    Return $iSleep = ( 1 - $iFPSIn / $iFPSOut ) / $iFPSOut
    Endfunc

    [/autoit]

    Müsste stimmen, falls nicht, bitte korrigieren.
    Das Ganze müsstest du dann so bauen:

    [autoit]


    While 1

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

    _CaptureImage() ; Bild aufnehmen..
    Sleep(_CalcSleep(_GetFPS, $iNewFPS))

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

    Wend

    [/autoit]


    Wobei hier $iNewFPS die FPS sind die du haben möchtest und _GetFPS die aktuellen FPS misst..

  • wie soll das funktionieren kannst du mir das erklären

    ich hab mir dein beispiel auch angekuckt wollte es ausführen passiert aber nichts.

  • hab ich gemacht passiert trotdem nicht viel

    Mach ich was irgendwie falsch??

    [autoit]

    $sPath = "C:\Xyron\EasyScreen\EasyScreen.exe"

    [/autoit]