Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi AVI mit MCI aufnehmen (https://www.delphipraxis.net/81572-avi-mit-mci-aufnehmen.html)

Mazel 29. Nov 2006 15:46


AVI mit MCI aufnehmen
 
Hallo,

Ich möchte ein kleines Programm schreiben, welches die Aktionen auf dem Desktop als avi aufnimmt. Ich habe es bisher mit Screenshots versucht nur leider nimmt dieser Vorgang genauso wie das umwandlen der vielen Eintzelbilder in eine AVI Datei sehr viel Resourcen weg. Und die Qualität des AVI ist auch nicht so berauschend. Ich habe hier im Forum gelesen dass es möglich ist mit Hilfe von MCI eine Aufnahme mit zu ermöglichen. Kennt jemand diese?

Gruß
Mazel

Sunlight7 29. Nov 2006 17:02

Re: AVI mit MCI aufnehmen
 
Hallo!

MCI ist eigentlich dafür gedacht, von echten Videoquellen aufzunehmen, wenn die Treiber dafür da sind.
Obwohl das nicht heißt, das es nicht möglich ist, aber Du bist da auf 1000 MB Dateigröße beschränkt.

Grüßle!

Mazel 29. Nov 2006 18:12

Re: AVI mit MCI aufnehmen
 
Hi,

ich hoffe ich werde die 80 MB Grenze nicht überschreiten, großen sollten die Filme die ich erstelle wirklich nicht werden, also würden die 1000MB locker reichen ;).

Aber wie ich ein AVI aufnehme weist du nicht?

Gruß
Mazel

Sunlight7 30. Nov 2006 04:12

Re: AVI mit MCI aufnehmen
 
Du könntest zB die AVI Funktionen (MSDN-Library durchsuchenAVIFileInit, etc) verwenden, um die Bilder die Du Capturest gleich durch einen Kompressor zu jagen und in eine Datei zu speichern.

Praktisch habe ich das noch nicht gemacht, irgendwo (ist schon etwas her) hab ich bei MSDN mal ein Demo gesehen, wie das funktionieren könnte.

Wenn Du vom Desktop Aufnahmen machen willst, dann bleibt Dir nur ein Screen-Capture übrig, und Du brauchst einen flotten Codec.

An welche Größe (Pixel x Pixel), bzw fps hast Du gedacht zu erreichen?

Grüßle!

Mazel 30. Nov 2006 12:10

Re: AVI mit MCI aufnehmen
 
Ich dachte an 1024 x 768 mit 25 fps, aber das scheint mit Screenshots nicht zu schaffen, zumindest bei mir, ich komme auf 6 in der Sekunde, heißt das das alles Systemabhängig ist. Nun gut, 6 würden auch schon reichen, ruckelt zwar ein wenig aber das würde ich verkraften. Nur die bisherige Qualität ist nicht so berauschend, ich muss dazu sagen das ich mir mein bisherige Version aus vielen Codeschnippseln zusammengebaut habe.

Daher wollte ich nicht mit Screens arbeiten sondern direkt eine Aufnahme per MCI durchführen, sofern es möglich ist.

Gruß
Mazel

Sunlight7 30. Nov 2006 18:41

Re: AVI mit MCI aufnehmen
 
Also direkt wüsst' ich keine Möglichkeit, oder man findet wo nen Treiber, der MCI den Desktop als Videoquelle vorgaukelt, wenns sowas gibt :gruebel:

6 fps bei 1024 x 768 :shock:
Hast Du nen so langsamen PC, oder so langsam programmiert? :mrgreen:

Mit meinem Standard Screen-Capture Makro komme ich bei 1152 * 864 auf 439.8 fps, obwohl das nicht auf Speed optimiert ist.
Wenn ich das ganze als 24 Bit Bitmaps auf die Platte mitspeichere, dann fällt es gewaltig auf 8.1 fps.
Damit das nicht passiert, sollte ja hier der Codec eingreifen, der die Datenmenge reduziert, die auf die Platte geschrieben wird, da das der Flaschenhals ist.

Grüßle!

Mazel 30. Nov 2006 21:11

Re: AVI mit MCI aufnehmen
 
:shock:

Das ist ne Menge, diese 440 fps. Mit welchem Standard Screen-Capture Makro bekommst du das hin? Es kann sein das mein Code zu langsam ist, denn ich speichere dieses als 24 Bit Bitmaps die eine Einzelgröße von 3 MB aufweisen. Zudem zeichne ich noch den Cursor, der bei einem Screenshot nicht mit gezeichnet wird extra in das Bild, dann habe ich den Code aus anderen Codes ertsmal zusammengeworfen und ich habe einen 1,4 GHz AMD 1600+ Prozessor. All diese Koponenten können zu der niedrigen Zahl von 6 fps führen :wink:

Dein Makro würde mich echt interessieren.

Gruß
Mazel

Sunlight7 30. Nov 2006 23:39

Re: AVI mit MCI aufnehmen
 
Gut, wenn ich das mit Cursor probiere komme ich dann auf ~272 fps.
Das liegt wahrscheinlich daran, das ich den Cursor mit SetPixelV zeichne :stupid:

An dem Makro ist nix besonderes dran, ich habe mir das irgendwann mal mit einigen Parametern gemacht :-D
Aber im Kern ist es nix anderes als ein simples BitBlt vom Desktop DC.
Delphi-Quellcode:
Wnd:=GetDesktopWindow;
DC:=GetWindowDC(GetDesktopWindow);
If DC=0 then Exit; // Failed

BitBlt(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, DC, 0, 0, SRCCOPY);

ReleaseDC(Wnd, DC);
Das Problem ist nicht, wie bekommst Du die Bilder, sondern, wie kannst Du schnell die anfallende Datenrate verringern, um es auf die Platte zu bringen.

Grüßle!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz