Seite 3 von 4
Verfasst: 06.05.2005 13:54
von traumatic
Ich kann Dir nur sagen, dass die DX-Newsgroups voll mit diesem Thema sind,
d.h. es muss nicht zwangsläufig an den PB-Funktionen liegen.
Ich bin weder Video-Papst, noch DirectShow-Gott, ich wollte doch eingangs
lediglich darauf hinweisen, dass MCI nicht die Antwort auf alles ist.
Ging's hier nicht eh mal um MP3s abspielen?
Das es mit anderen Programmen keine Probleme gibt, ist schon klar.
Natürlich kann man mit DirectShow so programmieren, dass auch alles läuft...
Ich behaupte mal, dass beispielsweise MovieSeek() schlicht und ergreifend
IMediaSeeking anspricht. Da es damit nicht geht, geht's auch in PB nicht.
Hast Du denn die DShow-Codes mal ausprobiert?
Verfasst: 06.05.2005 14:02
von jear
@traumatic
Hast Du denn die DShow-Codes mal ausprobiert?
Ja, ich habe den Kode des ersten Links probiert. Er spielt eine MPEG2 ab, das können die Movie-Funktionen von PB aber auch.
Ich suche jedoch die Möglichkeit, punktgenau ein Bild/ Frame aus einer MPEG in ein Image rendern zu lassen. Dazu wollte ich eigentlich nicht in die ganze DX-Geschichte eindringen müssen. Ich werde mir das aber mal in aller Ruhe ansehen.
Verfasst: 06.05.2005 14:27
von traumatic
Sollte ich am WE dazu kommen, schaue ich mir das mal genauer an.
Hast mich jetzt irgendwie neugierig gemacht. Ich kann aber nichts versprechen!
Verfasst: 06.05.2005 16:26
von traumatic
Ok, ich habe eben mal auf die Schnelle etwas ausprobiert:
Benutzes Videofile:
http://www.pcphotovideo.com/Samples/SVCD77.mpg (FSK: 16)
Benutzter CoDec:
GPL MPEG-1/2 Decoder
LoadMovie() versagt hier völlig den Dienst, lädt das File gar nicht erst.
Per DirectShow (IMediaSeeking->GetDuration()) bekomme ich eine korrekte
Längenangabe von 00:22, abspielen konnte ich das File aber auch nicht
ohne weiteres. **
Ich weiß noch nicht so genau, was man daraus folgern soll...
Entweder ich muß meine Annahme, die PB-Movie-Funktionen wären ein
DShow-Wrapper, zurückziehen (was mich allerdings sehr wundern würde,
da alles andere viel zu aufwendig wäre) oder DShow in DX7 "war noch
nicht so weit"...
Ein Bug in den Funktionen ist eigentlich (jaja, kotzende Pferde) ausgeschlossen.
Hmm...
Nachtrag: Wie lang sind Deine Files eigentlich so im Durchschnitt?
Ich frage, weil sämtliche 'duration'-funktionen von DShow longlongs
zurückgeben... ...vielleicht ist da doch etwas in die Hose gegangen?
Nachtrag2: Das Topic wurde nun wohl endgültig entführt...
** Logisch, ist ja auch ein Filter.
Verfasst: 07.05.2005 00:28
von jear
@traumatic
Wie lang sind Deine Files eigentlich so im Durchschnitt?
An der Dateigröße kann es nicht liegen. Die gezeigten Beispiele sind meist nur von ca. 1Min Dauer.
Die als Anzahl Frames bei MPEG2 von MovieLength() bei MPEG2-Dateien gemeldeten Werte sind in Wahrheit Zeitwerte.
Wenn da zB. steht : MovieLength: 584.000.869 Frames so hat diese Datei eine Spieldauer von 58.4 Sekunden. Teilt man den Wert durch 10.000.000 und multipliziert mit 25 dann kommt gerundet die tatsächliche Anzahl Frames von 1460 heraus.
Natürlich müssen so die Werte bei längeren Dateien sehr schnell zu LongLongs werden. Die PB-Funktion MovieLength() liefert aber nur eine Long und die wird daher auch oft negativ.
Wie der FPS-Wert von MovieInfo(0) zu interpretieren ist und wie man MovieSeek() richtig füttern muss, das habe ich noch nicht herausgefunden.
Meiner Auffassung nach ist das Ganze ein Fehler in der Interpretation der von DXShow gelieferten Informationen in PB. Für die Frameanzahl genügt eine Long immer. Dazu müsste aber der DX-Wrapper in PB sowohl für die Meldungen als auch für das Positionieren tatsächlich mit Frame-Werten arbeiten und nicht mit 10 NanoSekunden-Einheiten.
Verfasst: 09.05.2005 18:58
von traumatic
jear, bitte sag mir, du hast meine antwort noch gelesen, bevor das forum weg war...
Verfasst: 09.05.2005 20:02
von zigapeda
noch eine frage:
Wie kann ich mp3 oder movie formate in eine exe includen bzw. wieder verwenden?
Verfasst: 09.05.2005 22:46
von jear
@traumatic
Ja ich hatte Deine Antwort gelesen, mir den Kode herausgeholt und ausprobiert. Dann war das Forum weg und, da ich heute abend nicht zuhause war, merke ich nun erst, dass es wieder da ist.
Nun gut. Die Grundprobleme sind auch mit Deinem Kode nicht gelöst. Die Framerate kommt nicht richtig und die ausgelesene Zeit landet in einer Long-Variablen, die schnell überläuft.
Meiner Meinung nach müsste der Wrapper in PB die Zeitwerte intern in die Anzahl der Frames umrechnen und zur Positionierung auch Framewerte annehmen. Nur dann ist eine einheitliche Schnittstelle innerhalb der PB-Movie-Funktionen gegeben. Dass MovieInfo(0) dann auch einen richtigen Wert für FPS zurückgibt, wäre wünschenswert.
Verfasst: 09.05.2005 22:52
von traumatic
jear hat geschrieben:Die Framerate kommt nicht richtig [...]
Die FPS und Anzahl der Frames werden _nicht_ richtig angezeigt?
Wie sehen denn die Werte bei Dir aus?
Kannst Du mir mal so ein Video-File von Dir zur Verfügung stellen
(bitte so klein wie möglich...) ?
Ähm, achso... kannst Du den Code bei der Gelegenheit nochmal posten?

Verfasst: 09.05.2005 23:16
von jear
@traumatic
Hierder modifizierte Kode und eine Beispielvideo gezipt (1300 MB)
Das Beispielvideo hat tatsächlich genau 250 Frames. Der modifizierte Kode zeigt aber 254. Bei anderen Dateien die größer sind, bei denen die Long aber noch nicht überläuft, wird die tatsächliche Frameanzahl genau getroffen.