Das Demo dort fordert die Units DirectDraw und DirectShow
Gibt es nicht was einfaches ?
Ich möchte die Zeitdauer einer Video-Datei in Sekunden anzeigen lassen
Delphi-Quellcode:
{$R *.dfm}
function gettimefromfile(FileName: String): Double;
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
begin
ShowMessage('(Error Code : ' + inttohex(hr, 8) + ')');
ClearDirectShow;
Exit;
end;
hr := MediaDet.put_Filename(wFileName);
if (hr <> S_OK) then
begin
ShowMessage('(Error Code : ' + inttohex(hr, 8) + ')');
ClearDirectShow;
Exit;
end;
hr := MediaDet.get_StreamLength(Duration);
if (hr <> S_OK) then
begin
ShowMessage('Konnte die Länge nicht aus der Datei lesen');
ClearDirectShow;
Exit;
end;
result := duration;
finally
SysFreeString(wFileName);
end;
ClearDirectShow;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Time: double;
begin
if opendialog1.Execute then
begin;
Time := gettimefromfile(opendialog1.FileName);
if Time > 0 then
Label1.Caption := 'Länge: ' + FormatDatetime('hh:nn:ss', Time / {One_Second /} (24*60*60))
else
Label1.Caption := 'Länge: Datei auswählen'
end;
end;