• Also ich versuche ein Desktopfilmaufnahmeprogramm zu erstellen, leider fehlt mir das wissen wie aus Fotos eine Filmdatei wird (evtl. auch mit Sound). Ein paar hilfen hab ich schon von Andy:
    -Bildervergleich um Platz zu sparen
    -Bmp32 für die Screenshots und zum vergleichen

    Meine Frage jetzt: Wie speichert man die Fotos (Screenshots) mit Sound zu einer Videodatei (z.B. avi/mp4)?

    Und mit eurer Hilfe werde ich dann ein möglichst schnelles Programm zum aufnehmen von Desktopvideos erstellen ;)

    Vielen Dank schonmal für eure Hilfe

  • Hi,
    die Bitmaps auf der Platte zu speichern sollte ja kein Problem sein. Dann entweder etwas eigenes Basteln oder z.B. sowas benutzen.
    Das AVI-Format ist zwar nicht das Gelbe vom Ei (ungeeignet fürs Streaming) aber ziemlich simpel aufgebaut...Die Bilder in so einen Container reinzustopfen kann so schwer ja nicht sein^^. Für den Sound gibts ja auch Profis hier im Forum (zu eukalyptus rüberwink)
    Ich mach mich mal bzgl AVI schlau....

  • Naja, da kann man aber mal anfangen zu optimieren und ggf auch die Kompression einbauen

  • Danke für eure Hilfen, das schlichte Autoitfenster ist eigentlich fertig, aber hat nicht alle features, ihr könnt ja wenn ihr wollt noch mehr reinbauen, in der Recorder.exe habe ich nämlich noch mehr reingebaut.
    Mir der Recorder.exe sieht es folgendermaßen aus:
    C++: eigentlich fertig, ich bräuchte mal einen der mir einen C++ Fehler hilft zu beheben, dann würde ich hier schonmal mit der C++ Version das ganze veröffentlichen.
    Die Assemblerversion wird wohl noch dauern wenn ich sie nicht sogar aufgebe, das ist nämlich ziemlich schwer mit Assembler die ganze Aviwriter-UDF umzusetzen, in C++ bin ich ja schon fertig (übrigens keine UDF draus gemacht, sondern nur alles auf mein Programm eingestellt).

    Wer C++ kann probiert schonmal folgendes: (GUIT+Recorder-Release+Fehlermeldungsbild unten)

  • Wenn ich versuche die Recorder.exe zu starten:


    Zitat

    Recorder.exe - Systemfehler
    ---------------------------
    Das Programm kann nicht gestartet werden, da MSVCR100D.dll auf dem Computer fehlt. Installieren Sie das Programm erneut, um das Problem zu beheben.

    Wenn ich die Videomaker.au3 starte:

    Zitat

    C:\Users\SEuBo\Desktop\Videoaufnahme\Aero.au3(2,10) : ERROR: can't open include file <GUIT.au3>
    #include <GUIT.au3>

  • oO Ich benutze 2010, ich schätze das kommt daher weil ich Debug eingestellt habe und nicht Release, deswegen hängt er die DLL an als Debugger...
    Hier die Release: (Wobei die unnötig ist, weil das ein Fehler ist weiß ich ich lad mal ein Bild von der Meldung hoch)
    autoit.de/wcf/attachment/11249/
    autoit.de/wcf/attachment/11248/
    Im C++-Code stehts auch: pfile ist so:
    void** pfile;
    und dann die Funktion aus der avifil32.dll

  • Habe herausgefunden, dass es doch die vfw.h gibt, der Fehler ist also weg, aber jetzt gibts einen Fehler, der nicht vom VC++ Debugger erkannt wird...

    Unbehandelte Ausnahme bei 0x77c17464 in Recorder.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x33463128
    Disassembly:
    555: mainret = main(argc, argv, envp);
    00412BB6 mov eax,dword ptr [envp (418174h)]
    00412BBB push eax
    00412BBC mov ecx,dword ptr [argv (418178h)]
    00412BC2 push ecx
    00412BC3 mov edx,dword ptr [argc (418170h)]
    00412BC9 push edx
    00412BCA call @ILT+395(_main) (411190h)
    *-->00412BCF add esp,0Ch
    00412BD2 mov dword ptr [mainret (418188h)],eax
    556: #endif /* WPRFLAG */

    *-->= Pfeil in VC++:Wird ausgeführt wenn aktueller Thread aus Funktion wiederkehrt (?)

  • Hi,
    der ADD ESP,12 holt die 3 Parameter vom Stack, nichts ungewöhnliches, da cdecl-konform. Wenn das allerdings die gecallte Funktion (wie z.B. die WinAPI-Funktionen) schon gemacht hat, dann geht das natürlich in die Hose!
    Abhilfe ist in C++, die Funktion statt in cdecl in stdcall aufzurufen (falls das klappt, hab keine Ahnung von C++), dann lässt der Compiler den Stack nach dem Call hoffentlich in Ruhe!

  • Hab mal ein bisschen probiert ausgeklammert usw... und herrausgefunden: wenn ich alles ausklammer, dann kommt nur eine Rückgabe die nicht 0 ist, also gibt es einen Fehler, aber es kommt nicht das Fehlerfenster, also kommen die Parameter anscheinend nicht in meiner Funktion an. Die angezeigte Funktion war also anscheinend meine, die die Parameter nicht findet und wenn ich die dann auswerten und benutzen will, gibt es natürlich einen Fehler. Danke, deine Antwort hat mir geholen

    EDIT:
    Er kann die Parameter doch lesen, ich weiß nicht wo der Fehler liegt

    EDIT:
    Weiteres herausgefunden: es liegt an der Zeile:
    AVIStreamSetFormat(pstream,0,&bi,bi.biSize);

    2 Mal editiert, zuletzt von TheShadowAE (17. September 2010 um 14:08)

  • Ich hab es jetzt soweit, dass es ohne Komprimierung geht, aber die Komprimierung klappt nicht...
    Wenn man mein neuen C++-Code startet (jetzt sind Parameter zum Test egal), dann kreigt man schon gesagt was Falsch ist (Nach Kompressorauswahl+Konfigurierung): Der Kompressor kommt anscheinend nicht in AVIMakeCompressedStream an oder wird nicht erkannt. Was ist falsch?

    Code:

    Spoiler anzeigen

    EDIT: Es klappt!!! :):thumbup:
    Gibt aber noch andere Fehler (zB die Zeit...)
    Code-Download: