kennt jemand von euch eine Componente, womit ich mein Desktop oder ein anderes beliebiges Windows-Handle als Video (AVI, ...) aufnehmen kann? Ich habe schon bei Torry.ru geschaut aber dort waren genau eine Componente (tVideoGrabber), die 800-2000 Euro kostet. Find ich z.Z. ein klein wenig zu viel. ^^
Wäre nett, wenn jemand was kennt und nach möglichkeit mit einer kleinen Beschreibung (Source).
Hab da dieses DSPack von http://www.progdigy.com/ gefunden .. kann das auch vom Screen Videoaufnahmen machen? Konnte das nicht so genau rausfinden.
Ähm .. wenn ja, wie ?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7809 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn du deinen Bildschirm abfilmen willst solltest du dich mal mit dem MS Windows Media Encoder beschäftigen. Ist kostenlos und relativ simple zu bedienen. Ist aber glaub ich nicht unbedingt geeignet einen 3D Shooter aufzuzeichnen, da der glaub ich 15FPS aufzeichnet. Weiß nicht ob man auch mehr einstellen kann.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
naja, 15 Frames sind ja nicht unbedingt viel. Daher denk ich mal das der Media Encoder flach fallen wird. Am besten wäre halt sowas wie der TVideoGrabber halt nur kostenlos, da dieser wunderbar funktioniert hat. Problem liegt ja auch daran, das die Aufnahme den GameGuard umgehen muss und ich nicht direkt auf den Windows-Handel zugreifen kann. (Zumindest vermute ich das).
Es sollte halt alles in einem Programm vereint sein und nicht das man 200 Sachen installieren muss, bevor man was aufnehmen kann. Wer vielleicht noch so eine Komponente rumfliegen hat, die das schafft und die man mir auch überlassen würde, wäre ich sehr dankbar. Natürlich würd ich auch in dem Programm reinschreiben, wem ich die Funktion zu verdanken habe.
Ich will das ja aber in meinem Programm mit einbauen. Und Fraps würde auch nicht funktionieren, da das Spiel was ich abfilmen möchte den GameGuard verwendet und Fraps dann auch nicht funktioniert. Wie auch immer .. ich bräuchte eine Komponente oder irgendein Source wo drinnsteht, wie das funktioniert.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Also erstmal ist es wichtig, dass du über gdi ein Screenshot des fensters machst(schneller als über opengl die pixel zu lesen) und dann kannst du diese Screenshots über VFW.pas es mit ein installierten Codec in ein Video bannen lassen. Es gibt einige sourcecodes dazu, drumm glaube ich du hast nicht wirklich gründlich gesucht hast. Schau mal bei delphi3d.com nach da sollte ein vcl version sein.
Alternativ kannst du auch Screenshots in bmp oder jpeg ablegen und dann im nachhinein mit memcoder in ein video packen. Dies hat den vorteil das du höhere fps erreichst als wenn du das video noch zur laufzeit codierst.
Ich arbeite ab und zu mal ein ein Projekt weiter welches erlaubt avi datein lesen und schreiben zu können, allerdings ohne libs und für alle platformen(nicht nur windows).
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Kann man denn mit VfW die Screenshots "on fly" in ein AVI bannen oder werden die Screenshots erst auf Platte gespeichert und erst beim beenden der aufnahme in ein Video-File konvertiert ?
Wenner das als Avi abspeichert sollte es ja wohl keine gravierende Pervormanzverluste geben oder?
Terra
PS: unter delphi3d.com fand ich nichts ordentliches.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
So bin nun zuhause und hab mal nachgeschaut.
http://www.delphi3d.net/download/avicap.zip liegt in der download section von delphi3d.net.
Die AVI wird zur laufzeit erstellt, AVI ist ein chunkbasiertes Dateiformat und somit ohne probleme zur laufzeit schreibbar.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Also das AviCap ist spitze ... jetzt muss ich nur mal gucken wie ich das mit meinen Intressen verbinde ^^
Aber das bekomm ich bestimmt auch noch hin. trotzdem Vielen Dank.
Allerdingst ruckelt die Aufnahme ohne ende und es werden Frames übersprungen. Ist also nicht so schön wie in der Demo zu sehen ist. Was mache ich denn da falsch?
Hinzu kommt noch das ich in der Auflösung was ändern musste:
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Wie oft rufst du das aufnehmen auf und in welchen abständen ?
Richtig wäre wenn du es 25mal aufrufst unszwar in 1000/25=40ms abstand.
Also 0,40,80,120,....,880,920,960,1000,1040,1080.
Desweiterem rate ich nutz eine kompremierung DivX z.B., da unkompremiert dein system langsamer macht.
Grund hierfür ist dann der Flaschenhals Festplattenzugriff.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Bei mir ist es genau so eingestellt mit dem abrufen. Allerdingst hab ich das gefühl, das der ziemlich lange braucht, bis der ein Bild eingespeichert hat. Könnte das am Spiel liegen? oder das ich das Handle aufrufe anstelle die OpenGL-Anweisung, die vorher drinn stand?
hdcScreen := wglGetCurrentDC(); stand ja vorher drinne.
Das mit der komprimierung kann ich nicht bestätigen. Eher umgekehrt, da das Programm ja jedesmal das Bild komprimieren muss und erst dann den nächsten Shot macht. Bie der unkomprimierten Geschichte erhalte ich die besten Werte. (SATA2)
Wie auch immer ... habs bis jetzt nicht hinbekommen eine relativ flüssige Aufnahme von dem Spiel zu bekommen.
Bitte um Hilfe !!!
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Alternativ solltest du mal versuchen dein code ohne zeichnen zu compilieren und das zu capturn.
So kannst du wenigstens rausbekommen ob es an der fülle von daten, für die GPU liegt.
Wenn es ohne probs läuft würde ich sagen, a)verringer die auflösung oder komplexität b)zeichne alle bewegungen in einer datei auf und render dann die aufzeichnung frame für frame(q3,hl,hl2 aben ein demorecorder und man könnte damit in ruhe die demo aufzeichnen) c)probieren bis es klappt ^^.
Wglgetcurrentdc() ist ne in opengl implementierte funktion die einfach nur den genutzten device context zurück gibt.
Wenn deine variante auch den korrekten DC zurück gibt ist es wurscht. Ausser die funktion wird immer und immer wieder aufgerufen, also bei jedem shot, dann würde ich zu der opengl funktion raten.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Könnt es auch daran liegen, das ich ein externes Programm "abfilmen" möchte und das Spiel in DirectX läuft ?
PS: Mit glgetcurrentdc() habe ich außerdem eine fehlermeldung bekommen. es ging erst, nachdem ich den handel definiert habe.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.