![]() |
WMV-Dauer ermitteln
Hallo zusammen,
ich lasse díe User über Buttons WMV-Videos abspielen:
Delphi-Quellcode:
ShellExecute(Handle, 'open', PChar(ClipName), '', '', SW_NORMAL);
Nun möchte ich vorher die Clipdauer im Button-Hint anzeigen. Wie kann ich die am einfachsten ermitteln? |
AW: WMV-Dauer ermitteln
Dazu müsstest du die Metadaten der Datei auswerten
![]() |
AW: WMV-Dauer ermitteln
Gibt es auch eine Lösung für Delphi?
Ich finde auch im Netz keinen Ansatz... |
AW: WMV-Dauer ermitteln
*push*
|
AW: WMV-Dauer ermitteln
In Delphi funktioniert es wahrscheinlich ganz genauso^^
Du musst den Code nur eben nach Delphi übersetzen ;-) Bzw. schau mal hier: ![]() |
AW: WMV-Dauer ermitteln
oder so:
Delphi-Quellcode:
Mediaplayer1.TimeFormat := tfMilliseconds;
Mediaplayer1.Open; Showmessage(FormatDatetime('hh:nn:ss', Mediaplayer1.Length / 1000 / (24*60*60))); |
AW: WMV-Dauer ermitteln
Zitat:
Zitat:
Wenn das schneller wäre als die obige Lösung hätte ich schon Interesse... |
AW: WMV-Dauer ermitteln
Zitat:
Ich werde es erst mal so belassen, falls jemand mal eine schnellere Lösung findet - immer her damit :) |
AW: WMV-Dauer ermitteln
Hi,
in meinem Mediaplayer verwende ich die Mediainfo.dll, damit könnte man das auch machen. ![]() gruß tom |
AW: WMV-Dauer ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Oder das ganze mit DirectShow! Hab das mal nen test Proggy fertig gemacht, nur ist das vllt auch net die schnellste Variante??!!
Die DirectX Header Dateien von ![]() |
AW: WMV-Dauer ermitteln
Ich habe gerade festgestellt, dass es unter Delphi (Debugmodus) sehr langsam läuft (die Debuginfos zeigen mehrfach Thread- und Modusl-Infos an).
Läuft das Programm selbnständig geht es schon schneller. Ich werde es so belassen, da es als einfachster Weg erscheint. Die DirectX-Variante funktioniert scheinbar gleichermaßen. Danke Euch nochmal. |
AW: WMV-Dauer ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab die DirectX Version noch einwenig überarbeitet, wenn dir das jetze nicht gefällt, dann weiß ich auch net :lol:
|
AW: WMV-Dauer ermitteln
Gefällt jetze :-D
Ich habe es noch etwas umgestellt. Unter Win7 ging alles perfekt. In meiner VM unter nacktem XP war jedoch keine Dauer ermittelbar. Vermutlich, weil kein passendes DirectX installiert ist!? Ich habe jetzt einfach eine alternative Ermittlung über einen MediaPlayer eingebunden. Ich denke, so passt das für alle Fälle... Danke nochmal :thumb:
Delphi-Quellcode:
unit VideoDuration;
interface function GetVideoDuration(FileName: String): TDateTime; implementation uses DirectShow9, ActiveX, Dialogs, SysUtils, MPlayer, Forms; var hr: HRESULT; MediaDet: IMediaDet; procedure ClearDirectShow; begin MediaDet := nil; end; function DurationFromMediaPlayer(FileName: String): TDateTime; var MediaPlayer: TMediaPlayer; begin MediaPlayer := TMediaPlayer.Create(nil); MediaPlayer.Visible := False; MediaPlayer.Parent := Application.MainForm; MediaPlayer.FileName := FileName; MediaPlayer.TimeFormat := tfMilliseconds; MediaPlayer.Open; Result := MediaPlayer.Length / 1000 / (24 * 60 * 60); MediaPlayer.Close; FreeAndNil(MediaPlayer); end; function GetVideoDuration(FileName: String): TDateTime; var Duration: Double; wFileName: PWideChar; begin; ClearDirectShow; Result := 0; wFileName := StringToOleStr(FileName); try hr := CoCreateInstance(CLSID_MediaDet, nil, CLSCTX_INPROC, IMediaDet, MediaDet); if hr = S_OK then hr := MediaDet.put_Filename(wFileName); if hr = S_OK then hr := MediaDet.get_StreamLength(Duration); if hr = S_OK then Result := Duration / (24 * 60 * 60) else Result := DurationFromMediaPlayer(FileName); finally SysFreeString(wFileName); end; ClearDirectShow; end; initialization CoInitialize(nil); finalization CoUnInitialize; end. |
AW: WMV-Dauer ermitteln
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz