![]() |
MediaInfoDll + Schleife sehr langsam
Guten Abend die Herren,
ich bin gerade dabei für ein kleines Programm Videoinformationen aus meinen Videos zu lesen. Dies löse ich mit der MediaInfo.dll und folgendem Code:
Delphi-Quellcode:
Es funktioniert prinzipiell einwandfrei, mit Ausnahme des Umstandes, dass allein für 11 Video-Dateien (.avi) etwa 1 ganze Minute gebraucht wird, um die 4 Informationen pro Datei auszulesen und in das StringGrid zu schreiben. Woran kann das liegen?? Mein Rechner ist nich der langsammste, falls das damit zusammenhängt (AMD X2 6000+ und 4 GB Ram).
procedure TForm1.VideoDataRead;
var Handle : Cardinal; I : integer; X : integer; begin for I := 0 to StringGrid1.RowCount - 1 do StringGrid1.Rows[I].Clear(); StringGrid1.Cells[0,0] := 'Name'; StringGrid1.Cells[1,0] := 'Länge'; StringGrid1.Cells[2,0] := 'Format'; StringGrid1.Cells[3,0] := 'Dateigröße'; StringGrid1.Cells[4,0] := 'Auflösung'; for X := 1 to ValueListEditor1.RowCount -1 do begin Handle := MediaInfo_New(); MediaInfo_Open(Handle,PChar(ValueListEditor1.Cells[1,X])); StringGrid1.Cells[0,X] := ValueListEditor1.Keys[X]; StringGrid1.Cells[2,X]:=(MediaInfo_Get(Handle, 0, 0, 'Format/String', 1, 0) + ', ' + MediaInfo_Get(Handle, 0, 0, 'Format/Info', 1, 0)); StringGrid1.Cells[3,X]:= MediaInfo_Get(Handle, 0, 0, 'FileSize/String4', 1, 0); StringGrid1.Cells[1,X]:= MediaInfo_Get(Handle, 0, 0, 'PlayTime/String3', 1, 0); StringGrid1.Cells[4,X]:= MediaInfo_Get(Handle, 1, 0, 'Width', 1, 0)+ ' x ' + MediaInfo_Get(Handle, 1, 0, 'Height', 1, 0); end; end; Zur Information: Im ValueListEditor liegt als Keys die Namen der Dateien und als Value der jeweilige Pfad zur Datei. MFG MaToBe |
Re: MediaInfoDll + Schleife sehr langsam
Ich habe jetzt zwar deinen Code nicht ausprobiert, aber mir ist folgendes aufgefallen:
Du durchläufst in jedem Schleifendurchgang
Delphi-Quellcode:
Dafür fehlt das entsprechende Gegenstück dazu:
Handle := MediaInfo_New();
Delphi-Quellcode:
Vielleicht läuft es ja schon dadurch schneller, wenn man MediaInfo_New() nur einmal vor der Schleife ausführt und das Handle für jede Datei wiederverwendet...
procedure MediaInfo_Close(Handle: Cardinal) cdecl stdcall;
Ich glaube nicht, dass es an der DLL liegt; wenn man z.B. ein einer Eingabeaufforderung die CLI von mediainfo, die ja dieselbe DLL verwendet, mit einer Reihe von Dateien beschäftigt, geht das ziemlich schnell:
Delphi-Quellcode:
erledigt das in weniger als einer Sekunde...
c:\Programme\MediaInfo\MediaInfoCLI.exe --Inform=Video;%Width%\n *.mkv
.sundance. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 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