vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Länge eines mp4 Videos ermitteln 
Autor: Spitzbube66
Datum: 17.01.24 13:32

Hallo Gemeinde,

ich möchte die Länge von mp4 Videos ermitteln, nachdem ich sie in den Windows Media Player geladen habe. Mit der für mich logischen Methode:

Dim VideoLength As Double
VideoLength = WMP1.currentMedia.duration

funktioniert es leider nicht, ich bekomme immer nur die "0" als Rückgabewert. Hier in den Tipps und Tricks findet man den Artikel "Größe und Spieldauer eines AVI-Videos ermitteln" (https://www.vbarchiv.net/tipps/details.php?id=662), der aber bei mp4 Videos nicht weiter hilft. Google und ChatGPT (-> .currentMedia.duration) bringen mich ebensowenig voran.

So hoffe ich auf das Schwarmwissen hier und wäre für Lösungsansätze äußerst dankbar

Gruß Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Länge eines mp4 Videos ermitteln 
Autor: -Franky-
Datum: 17.01.24 19:16

Hi

Mir fallen Adhoc 2 Möglichkeiten ein. Per Interface IPropertyStore und da liest halt die "System.Media.Duration" aus oder per MediaFoundation Interfaces/APIs per IMFSourceReader.GetPresentationAttribute -> MF_PD_DURATION. Mit diesen Infos solltest Du so einiges finden.

Mit freundlichen Grüßen
-Franky-

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Länge eines mp4 Videos ermitteln 
Autor: Spitzbube66
Datum: 17.01.24 20:34

Hallo Franky,

Danke für die Unterstützung. Nach erster Recherche sieht es leider so aus, als ob das Ganze unter VB6 nicht funktioniert, da der Zugriff auf die Media Foundation API hier nicht gegeben ist. Ich finde auf die Schnelle auch kein Beispielprojekt dazu, hast Du da evtl. etwas?

Gruß Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Länge eines mp4 Videos ermitteln 
Autor: -Franky-
Datum: 17.01.24 23:10

Hi

Ich gehe davon aus das Du ChatGPT zum Thema VB6 im Zusammenhang mit der MediaFoundation befragt hast und die Antwort von ChatGPT kann ich mir vorstellen. Mein Tipp: Frag niemals ChatGPT wenn es um das Programmieren geht. ChatGPT ist dumm. Ich kann Dir definitiv sagen, das die MediaFoundation bestens unter VB6 funktioniert und das man mit den richtigen Suchbegriffen (siehe unten) durchaus im Netz was dazu finden kann. Und was ist mit IProprtyStore? Klar hab ich Beispiele zu IPropertyStore und zur MediaFoundation. Besser ist es aber sich mit den Sachen auseinander zu setzen als fertigen Code zu kopieren und zu nutzen ohne zu verstehen was da passiert. Was ich Dir aber mitgeben kann ist ein Fahrplan wie das mit der MediaFoundation und/oder mit IPropertyStore funktioniert.

MediaFoundation:
1. API MFStartup(MF_VERSION_2, MFSTARTUP_FULL)
2. API MFCreateSourceReaderFromURL(MediaFile, 0&, IMFSourceReader)
3. IMFSourceReader.GetPresentationAttribute(MF_SOURCE_READER_MEDIASOURCE, MF_PD_DURATION, PROPVARIANT)
4. ist PROPVARIANT.vt = VARTYPE.VT_UI8 ? -> PROPVARIANT.uhVal -> Duration
5. API PropVariantClear(PROPVARIANT)
6. IMFSourceReader.Release
7. API MFShutdown.

IPropertyStore:
1. API SHGetPropertyStoreFromParsingName(MediaFile, 0&, GPS_DEFAULT, IID_IPropertyStore, IPropertyStore)
2. IPropertyStore.GetValue(System.Media.Duration, PROPVARIANT)
3. ist PROPVARIANT.vt = VARTYPE.VT_UI8 ? -> PROPVARIANT.uhVal -> Duration
4. API PropVariantClear(PROPVARIANT)
5. IPropertyStore.Release

Um es Dir etwas einfacher zu machen, kannst ja die oleexp.tlb von vbforums nutzen: https://www.vbforums.com/showthread.php?786079-VB6-Modern-Shell-Interface-Type-Library-oleexp-tlb

Mit freundlichen Grüßen
-Franky-

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Länge eines mp4 Videos ermitteln 
Autor: Spitzbube66
Datum: 18.01.24 09:41

Moin Franky,

vielen Dank nochmal für die Mühe. Grundsätzlich gebe ich Dir natürlich Recht, es ist immer besser Dinge zu verstehen, anstatt nur dumpf zu kopieren. Bei manchen Problemstellungen, so wie jetzt, finde ich hier, oder auf anderen Quellen im Netz, Lösungen, die ich dann für mein Projekt anpasse. Ich setze mich also schon mit der Funktionsweise auseinander und verstehe sie auch (größtenteils).
Finde ich im Netzt nichts Passendes, liefert ChatGPT teilweise Lösungsansetze die mich etwas weiter bringen, aber oft auch absolut nicht funktionieren.

Ich verstehe noch nicht, warum wmp.currentmedia.duration nicht das erwartete Ergebnis liefert. Ich versuche mich mal anhand Deiner Tipps schlau zu machen, für Alternativlösungen wäre ich trotzdem weiterhin dankbar.

Gruß Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Länge eines mp4 Videos ermitteln 
Autor: -Franky-
Datum: 18.01.24 10:38

Hi Meine Empfehlung für Dich: Nutze die oleexp.tlb. Dann musst Du Dich nicht mit mit Pointern und VTables der COM-Interfaces herumschlagen. Einfach die TLB als Verweis in Deinem Projekt hinzufügen (evtl. brauchst auch die .bas-Dateien die unter Add-Ons aufgeführt sind). Da sollte alles drin sein (APIs/Interfaces) was Du brauchst. Ansonsten gibt es unter dem Link, wo man die oleexp.tlb herunterladen kann, mit Sicherheit auch Beispiele zur MediaFoundation und IPropertyStore die Du für Deine Bedürfnisse anpassen/abändern kannst.

Warum der WMP das nicht kann? Das kann mehrer Ursachen haben. Mit welcher Windowsversion bist Du unterwegs? Meine erste Frage wäre: Wenn Du im Explorer ein rechstklick auf die MP4 machst -> Eigenschaften, kannst Du da die Duration der MP4 sehen? Wenn ja, wäre IPropertyStore der erste Weg weil der Explorer ebenfalls IPropertyStore verwendet um entsprechende Daten auszulesen. Wenn nicht, dann ist eventuell der PreviewHandler für MP4 veränder worden (passiert evtl. wenn man ein anderes Programm installiert und dieses als Standardprogramm für MP4 zuweist und dieser seinen eigenen PreviewHandler installiert). Standardmäßig ist der WMP der PreviewHandler für MP4. Die MP4 könnte defekt sein. Es wird kein passender Decoder für MP4 gefunden. Die MediaFoundation selbst nutzt seinen eigenen Decoder und hat nichts mit dem WMP oder den PreviewHandlern zu tun.

Mit freundlichen Grüßen
-Franky-

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Länge eines mp4 Videos ermitteln 
Autor: Spitzbube66
Datum: 18.01.24 12:04

Hallo Franky,

ich arbeite unter Windows 10 in meiner Firma und 11 auf dem Notebook zuhause. In den Eigenschaften der Videos werden die Länge (also Spieldauer), Bildbreite und -höhe, Datenrate und die Einzelbildrate korrekt angezeigt. Ich werde mich übers Wochende ausgibig mit Deinen Hinweisen beschäftigen, Du scheinst ja wirklich tief in der Materie drin zu stecken. Ich werde später berichten.

Besten Dank
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Länge eines mp4 Videos ermitteln 
Autor: -Franky-
Datum: 18.01.24 12:26

Spitzbube66 schrieb:
Zitat:

In den Eigenschaften der Videos werden die
Länge (also Spieldauer), Bildbreite und -höhe, Datenrate und
die Einzelbildrate korrekt angezeigt.

Hmm, dann sollte der WMP eigentlich auch die Duration ausgeben. What ever: Wenn der Explorer das korrekt macht, dann nutze die Möglichkeit per IPropertyStore. Per MediaFoundation ist es allerdings auch nicht komplizierter wie man es am Fahrplan erkennen kann.
Zitat:

Du scheinst ja wirklich tief in der Materie drin zu stecken

Mehr oder weniger. Nach fast 40 Jahren, wo ich programmiere, kennt man halt so ein paar Ecken in Windows und was unter Windows so machbar ist.

Mit freundlichen Grüßen
-Franky-

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel