Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 06, 2025 04:44

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frage zum erstellen von AVIs
BeitragVerfasst: Do Mai 01, 2008 16:24 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Moin allerseits,

Ich habe eine Frage zu den AVI Options. (vfw.pas von Microsoft)

http://msdn.microsoft.com/en-us/library/ms706567(VS.85).aspx

Um eine AVI zu erstellen müssen einige Optionen festgelegt werden, das geschieht stndardmäßig über AVISaveOptions, das Problem ist das diese Function ein Dialog öffnet wo man alles einstellen muss. Ich will diesen Dialog aber nicht, sondern die Einstellung mittels einer Inidatein übertragen.

Deswegen meine Frage wie kann ich die Einstellungen ohne diese Function vornehmen?

Code:
  1.  
  2.   galpAVIOptions:=@gaAVIOptions;
  3.   fillchar(gaAVIOptions, sizeof(gaAVIOptions), 0);
  4.  
  5.   AVISaveOptions(Application.Handle, ICMF_CHOOSE_DATARATE, 1, ps, galpAVIOptions );  // <- Öffnet den Dialog und speichert die Optionen in galpAVIOptions;
  6.  
  7.   AVIMakeCompressedStream(ps_c, ps, galpAVIOptions, nil);
  8.   AVIStreamSetFormat(ps_c, 0, BitmapInfo, BitmapInfoSize);
  9.  


Ich weis das galpAVIOptions ein Record is wo alles mögliche drin gespeichert wird, nur kenne ich die Werte nicht um sie manuell einzufügen -.-


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 01, 2008 16:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich fürchte, du wirst da nicht viele Möglichkeiten haben. Ich habe mich auch mal ein wenig im der MSDN umgeschaut und sehe da keine andere Methode. Die Werte für den AVICOMPRESSOPTIONS-Kram kann man teilweise erschließen, aber bei dem Handle und Format-Feldern wirds dann unschön.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 01, 2008 16:53 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
wenn du crosspostest, solltest du es zumindest verlinken:
http://www.delphi-forum.de/viewtopic.php?t=83023

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 02, 2008 09:58 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Hab es jetzt hinbekommen, keine Ahnung wie genau sich die einzelnen Werte auswirken aber immerhin es geht schonmal

Code:
  1.  
  2.   with gaAVIOptions do
  3.    begin
  4.    fccType:=0;
  5.    fccHandler:=1;
  6.    dwKeyFrameEvery:=16;
  7.    dwQuality:=10000;
  8.    dwBytesPerSecond:=1000;
  9.    dwFlags:=0;
  10.    lpFormat:= @AVISAVEOPTIONS;
  11.    cbFormat:=0;
  12.    lpParms:=@AVISAVEOPTIONS;
  13.    cbParms:=0;
  14.    dwInterleaveEvery:=2;
  15.   end;
  16.  
  17.  // AVISaveOptions(Application.Handle, ICMF_CHOOSE_KEYFRAME or ICMF_CHOOSE_DATARATE, 1, ps, galpAVIOptions );
  18.    
  19.     AVIMakeCompressedStream(ps_c, ps, galpAVIOptions, nil);
  20.     AVIStreamSetFormat(ps_c, 0, BitmapInfo, BitmapInfoSize);
  21.  
  22.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 02, 2008 10:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Jerk hat geschrieben:
Hab es jetzt hinbekommen, keine Ahnung wie genau sich die einzelnen Werte auswirken aber immerhin es geht schonmal

Bei solchen Fragen kann ich immer auf die MSDNs (AVIMakeCompressedStream) verweisen. Dort ist das meistens wirklich sehr gut beschrieben. Wenn man denn erst mal einen Anfang gefunden hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 02, 2008 12:50 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
ja die hab ich schon gefunden, leider stehen dort nirgendwo standardvalues :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 02, 2008 13:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Stimmt die Seite hattest du schon gefunden. Hab ich vollkommen übersehen. Jetzt muss ich wohl neben dem missglückten Gluckscheißerversuch auch ein bisschen Klotzen. ;)

Indirekt stehen dort aber Defaultwerte. Auf der Seite AVICOMPRESSOPTIONS stehen die einzelnen Werte noch mal recht genau erklärt.

fccType sollte vermutlich streamtypeVIDEO bekommen. Was das für ein genauer Wert ist kann ich gerade nicht nachvollziehen. Könnte mir aber auch gur vorstellen, dass es 0 sein könnte.

fccHandler ist ein von Microsoft heiß geliebter FourCC Wert. Einfach nur 4 Zeichen die ein Kürzel des entsprechenden Codecs angeben. Für DivX ist das entweder DIV3, DIV4 oder so was. XVid hat entsprechend XVID. Usw. Da müsste man entweder einen bestimmten vorraussetzen oder die im System enthaltenen Codecs enumerieren. Aber keine Ahnung wie das geht. Ich vermute mal dein Video dürfte unkomprimiert sein.

dwQuality ist die Bitrate. Aber keine Ahnung ob die damit kbps oder nur bps meinen. Aber da nichts dasteht würde ich sagen die meinen bps. Und dieser Wert richtet sich ganz nach dem Codec. Da gibts kein Standard. Da ich stark vermute, dass dein Video unkomprimiert ist wird dieser Wert wohl keine Bewandnis haben. Denn unkomprimiert und Bitrate. Du weißt was ich meine.

dwBytesPerSecond wird nur benutzt, wenn das Flag AVICOMPRESSF_DATARATE in dwFlags gesetzt ist. Kannst du also bei dir 0 lassen. dwInterleaveEvery wird auch nur benutzt, wenn in dwFlags das Flag AVICOMPRESSF_INTERLEAVE benutzt wird. Für dwKeyFrameEvery gilt genau das Gleiche. Oder der Umkehrschluss davon ist, dass die Einstellungen in den 3 Felder derzeit ignoriert wird.


Interessant finde ich auch diese Passage.
MSDN hat geschrieben:
Uses the data in this structure to set the default compression values for AVISaveOptions. If an empty structure is passed and this flag is not set, some defaults will be chosen.

Wenn du eine leere Struktur an AVISaveOptions übergibst sollte sich ein Dialog zur Auswahl der Kompression öffnen. Also wenn ich das richtig verstanden habe. Habe ich aber alles noch nie gemacht, deswegen weiß ich nicht ob ich evtl. gerade blödsinn erzähle.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 02, 2008 14:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
aus der vfw.h:
Code:
  1.  
  2. #define streamtypeANY   0UL
  3. #define streamtypeVIDEO mmioFOURCC('v','i','d','s')
  4. #define streamtypeAUDIO mmioFOURCC('a','u','d','s')
  5. #define streamtypeMIDI  mmioFOURCC('m','i','d','s')
  6. #define streamtypeTEXT  mmioFOURCC('t','x','t','s')


(geht doch nix über ein installiertes Dev-Cpp)

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 02, 2008 14:35 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Code:
  1.   with gaAVIOptions do
  2.    begin
  3.    fccType:=streamtypeVIDEO;
  4.    fccHandler:=mmioFOURCC('M','S','V','C');
  5.    dwKeyFrameEvery:=1;
  6.    dwQuality:=2000;
  7.    dwBytesPerSecond:=40000;
  8.    dwFlags:=AVICOMPRESSF_DATARATE or AVICOMPRESSF_KEYFRAMES or AVICOMPRESSF_INTERLEAVE;
  9.    lpFormat:= @AVISAVEOPTIONS; //???
  10.    cbFormat:=0;                           // ???
  11.    lpParms:= @AVISAVEOPTIONs;  //???
  12.    cbParms:=0;                           // ???
  13.    dwInterleaveEvery:=0;             // ???          <- was is da nen normaler wert?
  14.   end;
  15.  


so hab ich das jetzt erstmal.

BEi den letzten werten bin ich mir nich sicher.

Ich würde das Video gerne gleich compressen weil 500 Mb für 3 Sekunden einfach nen bisschen zu hart is...


Zuletzt geändert von Jerk am Fr Mai 02, 2008 14:58, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 02, 2008 14:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich glaube das hat was mit der Vermischung von Audio und Video zu tun. Aber genau weiß ich das auch nicht. Das sollten wenn dann vermutlich auch millisekunden sein. Ich schätze mal irgendwas zwischen 20 und 100 könnte da normal sein.

KeyFrameEvery auf 1 zu setzen würde nach meinem Verständniss dafür sorgen, dass maximal 1 ms gewartet würde bis das nächste Frame ein KeyFrame (collständig kodiert und somit großer Speicherverbrauch) wird. Also sollte jedes Frame ein Keyframe werden. Was sich aber nur bei Codecs wie DivX, XVid und ähnlichen Codecs negativ in der Größe wieder spiegelt.

Du kannst ja auch mal versuchen einen solchen Compressiondialog zu erstellen und mal schauen was da so raus kommt. Die sollten dann ja eigentlich wissen wie diese Struktur zu befüllen ist. Und im Debugger kannst du dir dann anschauen was die einzelnen Felder für Werte haben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 02, 2008 15:28 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Ich bin jetzt soweit, ohne den Dialog das Speile im Fullscren in guter quali recorded werden, allerdings sehr abgehackt und wie gesagt 500mb für 2 sec.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 02, 2008 16:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja das ist unkomprimiert. Ich denke da brauchst du einen Codec. So etwas wie XVid. Bzw solche Programme wie Fraps begrenzen auch die FPS auf 25 und dadurch gewinnen die natürlich auch Zeit zum komprimieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 02, 2008 16:29 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Da is das problem sobald ich es versuche zu komprimieren also mittels Compressoptions, wird totaler murks draus. Hab jetzt nach Datarate versucht mit quali 10000 (maximalwert) und bytespersecond 40000.

Das mit den Codecs klappt nicht, es funktioniert nur MSVC bei DIVX und XVId sagt er fehler in divx.dll div3 und div1-4 kennt er garnicht.
Ich habe aber den DIvxCodec installiert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 02, 2008 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Versuch doch mal den Vorschlag von Lossy, einmal mit Dialog und dann die Werte des Records auslesen. Einfach mal um zu schauen, was die da so eintragen.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 05, 2008 10:17 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Hab mal einen der wenigen codes genommen der Funktioniert, das is intel IYUV

der gibt folgendes aus:

fcctype: 0
fcchandler: 1987410281
dwkeyframeevery: 0
dwquality: 0
dwbytespersecond: 0
dwflags: 8
cbformat: 0
cbparams: 56
dwinterleaveevery: 0

lpparams und lpformat sind pointer ka wie ich die in string umwandel


dachte eigentlich so inttostr(lpparams^)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]