Bildschirmaufnahmegerät mit B+

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

Mrgames13

Betreff: Bildschirmaufnahmegerät mit B+

BeitragSa, Jun 13, 2015 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich würde gerne ein Bildschirmaufnahmeprogramm mit Blitzplus programmieren, das den kompletten Desktop aufnehmen und danach in einer .mp4 oder einer .avi Datei speichern kann. Ich habe folgenden Code bereits geschrieben:

BlitzBasic: [AUSKLAPPEN]
win1 = CreateWindow("Bildschirmaufnahme",0,0,ClientWidth(Desktop()),ClientHeight(Desktop()),Desktop())
MaximizeWindow win1

width = ClientWidth(win1)
height = ClientHeight(win1)

canvas = CreateCanvas(0,0,width,height,win1)
SetGadgetLayout canvas, 1,1,1,1
SetBuffer CanvasBuffer(canvas)

While WaitEvent(10)<>$803
mx = MouseX() -width/2
my = MouseY() -height/2
Cls
CopyRect 0,0,ClientWidth(Desktop()),ClientHeight(Desktop()),0,0,DesktopBuffer()
FlipCanvas canvas
SaveBuffer(DesktopBuffer(),".\Aufnahmen\Rec "+i+".bmp")
i1 = i1 +1
Wend
End

Die Probleme sind:

- Programm nimmt viel zu langsam auf das heißt max. 1 fps. Möchte aber auch Sachen mit 80 fps aufnehmen
- Habe bis jetzt noch keine Lösung gefunden eine .mp4 oder eine .avi Datei zu erstellen bzw. zu konvertieren

Hat vielleicht jemand ein Lösungsvorschlag?

Danke schon mal im Voraus

M&R Games Team
(MaA)
Unsere Homepage: http://mrgames13.jimdo.com/
Twitter: https://twitter.com/MR_Games_13?lang=de
Youtube: https://www.youtube.com/channe...otRnvQFosA

Mathias-Kwiatkowski

BeitragSa, Jun 13, 2015 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
hi, dafür müsstest du dir wahrscheinlich eine DLL schreiben oder besorgen, ich glaube nich das so etwas mit b+ realisierbar wäre. oder aber aben DLL benutzen...
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Thunder

BeitragSa, Jun 13, 2015 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bezweifle auch, dass B+ die richtige Wahl dafür ist.

Was ich allerdings an deiner Stelle noch versuchen würde: einfach Mal testweise ReadPixelFast auf dem DesktopBuffer Pixel für Pixel alles auslesen und ne DLL suchen, die das als JPEG oder PNG speichern kann.
Eventuell ist das schneller.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

DAK

BeitragSo, Jun 14, 2015 9:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Nö, CopyRect wird deutlich schneller sein.

B+ wird dir hierfür nicht helfen, da dir die Grafikbeschleunigung fehlt. Bildschirmvideos in Echtzeit sind nicht trivial. Da brauchst du alles an Tempo was du kriegen kannst, in B+ stirbst du an der Performance.
Gewinner der 6. und der 68. BlitzCodeCompo

Mrgames13

BeitragSo, Jun 14, 2015 10:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
das mit ReadPixelFast und WritePixelFast hab ich schon probiert, ist aber auch nicht wirklich besser.
Das mit der DLL ist aber eine gute Idee. Habe auch schon danach gesucht. Es heißt avicap32.dll sei bei der Konvertierung gut (habe sie aber bis jetzt noch nicht gefunden). Aber ich kann mit der Konvertierung a erst anfangen, wenn ich wirklich die Bilder schon habe.

Ich habe auch schon überlegt ob ich die Bilder einfach im Arbeitsspeicher ablegen soll und dann nach der Aufnahme gleich aus dem Arbeitsspeicher heraus konvertieren lassen soll. Aber bei längeren Aufnahmen ist das sicher nicht zielführend.

Könntet ihr mir vielleicht die DLL schreiben od. besorgen, denn ich habe da noch nicht so viel Erfahrung mit.

Danke

Das M&R Games Team
(MaA)
Unsere Homepage: http://mrgames13.jimdo.com/
Twitter: https://twitter.com/MR_Games_13?lang=de
Youtube: https://www.youtube.com/channe...otRnvQFosA

DAK

BeitragSo, Jun 14, 2015 11:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie gesagt, performantes Screencapture ist nicht leicht. Am Besten such dir eine fertige Lösung dafür, die du in dein Programm einbinden kannst. Also eine Lösung, die das Screencapture mit drin hat.

Was du am Besten machst, ist, den Capture streaming zu encodieren. Also capturen und jedes Frame direkt an die Konvertierung schicken.
Das Ganze über die CPU machen kannst du vergessen, dafür brauchst du die Grafikkarte, sonst geht sich das mit der Zeit vorn und hinten nicht aus.

Du hast hier hald unheimliche Datenmengen, vor allem vor der Komprimierung. Sagen wir mal, du capturest Full HD. Das heißt, du hast eine Auflösung von 1920x1080, das sind rund 2 Megapixel pro Frame. Jedes Pixel hat hier 4 Byte, also hast du 8 MB pro Frame. Dann hast du 60 Frames pro Sekunde, also 480 MB pro Sekunde. Zum Vergleich, LTE schafft bis zu maximal 100 MBit, also 12.5 MB pro Sekunde. Ein üblicher 8 GB-Arbeitsspeicher wäre nach rund 16 Sekunden voll, und eine 1 TB Festplatte würde gerade eine halbe Stunde zum Füllen brauchen. Theoretisch allerdings nur, weil selbst schnelle SSDs nicht unbedingt auf 480 MB/s kommen würden. Eine HDD hätte da kaum eine Chance mit zu kommen.

Deswegen musst du den Screencapture auf der Grafikkarte laufen lassen und direkt schon dort komprimieren. Bei den irrsinnigen Datenmengen wird es sonst schon mit der Verbindung von der GPU zur CPU eng, vor allem wenn da noch was Anderes rennt, was du aufnehmen willst.
Gewinner der 6. und der 68. BlitzCodeCompo

BtbN

BeitragSo, Jun 14, 2015 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Aero aus machen wenn es unter Windows 7 sein soll, sonst ist effizientes capturen unmöglich.
Ab Windows 8 kann man Aero nicht mehr aus machen, dafür gibt es dort eine neue API:

https://msdn.microsoft.com/en-...p/hh404487(v=vs.85).aspx

Reines CPU capturen und encoden ist mit einer halbwegs modernen CPU kein Problem, programme wie OBS oder ffmpeg machen genau das problemlos.

Mrgames13

BeitragSo, Jun 14, 2015 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Also direkt nach dem Aufnehmen an den Konverter weitereiten. Und das dann direkt als Videodatei speichern.

Mmm ja. Wäre möglich.

Und wie krieg ich das Konvertieren hin?

Das M&R Games Team
(MaA)
Unsere Homepage: http://mrgames13.jimdo.com/
Twitter: https://twitter.com/MR_Games_13?lang=de
Youtube: https://www.youtube.com/channe...otRnvQFosA

BladeRunner

Moderator

BeitragSo, Jun 14, 2015 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne dich entmutigen zu wollen, aber wenn ich mir so die bisherigen Beispiele auf deiner Page anschaue solltest Du erst noch ein wenig die Basics des Programmierens angehen bevor Du dich um Dinge wie Encoder kümmerst Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Mathias-Kwiatkowski

BeitragSo, Jun 14, 2015 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ich empfehle dir anstelle von "selbst machen" einfach mal ->Camtasia Studio

mit dem tool kannste sogar noch sagen wie du es haben willst (für youtube... für eigen webseite... als film... ect. is wie bei ikea, entdecke die möglichkeiten.... zumal du noch sounds ect einbinden darfst, oder komentare im video einfügen kannst usw...)

EDIT : Bei sounds bzw Musik Uhrheberecht bitte beachten! Sonst kann unter gewissen umständen jemand meinen dich eventuell belangen zu wollen!
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Mrgames13

BeitragMo, Jun 15, 2015 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ok danke wird ich mir auf jeden Fall anschauen

...

Ok geil, genau so etwas brauch ich vielen Dank.

Grüße

Das M&R Games Team
(MaA)
Unsere Homepage: http://mrgames13.jimdo.com/
Twitter: https://twitter.com/MR_Games_13?lang=de
Youtube: https://www.youtube.com/channe...otRnvQFosA

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group