Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Verwenden der MediaInfo.DLL (https://www.delphipraxis.net/32578-verwenden-der-mediainfo-dll.html)

Garfield 25. Okt 2004 16:28


Verwenden der MediaInfo.DLL
 
Hallo,

es gibt mehrere Befehlszeilenprogramme, mit denen man Informationen zu Videodateien erhalten kann. Für mein Programm benötige ich die Spieldauer von MPEG-2-Videos.

Beim Projekt MediaInfo (http://mediainfo.sourceforge.net/, http://sourceforge.net/projects/mediainfo/) gibt es neben einem Befehlszeilentool und einer GUI auch eine DLL. Diese MediaInfo.DLL würde ich gern benutzen. Jedoch scheitere ich bereits beim Öffnen der Datei.

Die DLL ist in C++ geschrieben und in der Dokumentation steht:

Zitat:

int MediaInfoLib::MediaInfo::Open ( const std::string & File )

Open a file.


Parameters:
File File to open

Return values:
0 File not opened
1 File opened
Meine Procedure sieht so aus:

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, MPlayer;

...

procedure TForm1.LiesDLLClick(Sender: TObject);

type
  TMediaOpen = function (Name: string) : Integer;

var
  Fehler: integer;
  LibHandle: THandle;
  MediaOpen: TMediaOpen;

  procedure add(Zeile : string);

  begin
    with Memo.Lines do Append(Zeile);
  end;

begin
  try
    LibHandle := LoadLibrary ('MediaInfo.dll');
    MediaOpen := GetProcAddress (LibHandle, 'MediaInfo_Open');
    if assigned(MediaOpen)
    then begin
      Fehler := MediaOpen (Datei);
      add (IntToStr(Fehler));
    end;
  finally
    FreeLibrary (LibHandle);
  end;
end;
Der Wert für den Fehler beträgt jedoch weder 0 noch 1 sondern bei zwei verschiedenen MPEG-2-Videos zuerst 17245408 und danach 170861792. Eine Fehlermeldung bekomme ich von Delphi 3 Prof nicht.

Nachtrag:

Das einzig brauchbare erschien mir http://www.delphipraxis.net/internal...ct.php?t=29012 zu sein. Allerdings scheitert der Import mit der Meldung, dass Selbstregistrierungsinformationen fehlen.

shmia 25. Okt 2004 17:11

Re: Verwenden der MediaInfo.DLL
 
Zitat:

Zitat von Garfield
Das einzig brauchbare erschien mir http://www.delphipraxis.net/internal...ct.php?t=29012 zu sein. Allerdings scheitert der Import mit der Meldung, dass Selbstregistrierungsinformationen fehlen.

Es handelt sich nicht um eine ActiveX-DLL, sondern um eine "normale" DLL.
Delphi-Quellcode:
TMediaOpen = function (Name: string) : Integer;  // Falsch
TMediaOpen = function (Name: PChar) : Integer;  // Richtig

Garfield 25. Okt 2004 18:21

Re: Verwenden der MediaInfo.DLL
 
Zitat:

Zitat von shmia
Es handelt sich nicht um eine ActiveX-DLL, sondern um eine "normale" DLL.

Stimmt leider.

Zitat:

Zitat von shmia
Delphi-Quellcode:
TMediaOpen = function (Name: string) : Integer;  // Falsch
TMediaOpen = function (Name: PChar) : Integer;  // Richtig

Danke für den Hinweis. Ich habe es geändert. Aber leider hat sich am Ergebnis nichts geändert.

Ich habe jetzt mehrere Wochen nach Informationen gesucht und eben bin ich über das gestolpert:

http://cvs.sourceforge.net/viewcvs.p...elphi/Example/

Ist ein Delphi 7 Projekt. Mal sehen, ob es auch unter Delphi 3 Prof funktioniert.

Garfield 25. Okt 2004 20:05

Re: Verwenden der MediaInfo.DLL
 
Das Delphi Projekt läuft unter Delphi 7 Personal. In den USES ist tntstdctrls eingetragen, was nicht dabei ist. Man kann es ohne Fehlermeldung löschen. Es existiert kein Dateiöffnendialog und dementsprechend ist die Anzeige im Beispiel äußerst sinnfrei.

Nachtrag:

Unter Delphi 3 Prof gibt es den Fehler: HowToUse_Dll Modul-Header fehlt oder ist beschädigt.

Garfield 26. Okt 2004 17:42

Re: Verwenden der MediaInfo.DLL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe versucht das gestern gefundene Delphi-Example unter D7 Personal zum Laufen zu bringen. Leider funktionierte es nicht auf Anhieb. Nach einigem Probieren habe ich es so geschafft:

1. Die MediaInfoLib - DLL (MediaInfo.DLL) und die von ihr benötigte MSVCR70.DLL gibt es auf Sourceforge (Auch unten im Archiv enthalten).

2. Das Example gab es ebenfalls bei Sourceforge.

3. Das Example habe ich angepasst.

a) In der 'HowToUse_Dll.pas' wurden die TNTSTDCTRLS aus den USES gestrichen, da die Benutzung des TntMemos anstelle des normalen Memos nur eine etwas veränderte Darstellung brachte.

b) In der 'MediaInfoDll.pas' wurden bei der Deklaration der Functions und Procedures die Variablentypen PWideChar in PChar geändert. Nun konnte der Dateiname übergeben werden und aus den vielen ? wurde lesbarer Text. Bei D3 Prof bekam ich allerdings beim Öffnen der Datei eine Fehlermeldung.

c) Nebenbei habe ich die Größe des Fensters geändert und es zentriert.

Wenn ich das ganze noch in mein D3 Prof Projekt unterbekomme, ist das Problem gelöst.

Garfield 27. Okt 2004 09:48

Re: Verwenden der MediaInfo.DLL
 
Liste der Anhänge anzeigen (Anzahl: 2)
Nun will ich diese recht einseitige Diskussion abschließen.

Die wie oben modifizierte MediaInfoDll.pas wird über USES eingebunden. Anschließend kann man die Mediadatei öffnen:
Delphi-Quellcode:
Handle := MediaInfo_Open(PChar(Datei));
Dabei ist Datei vom Typ String und wurde über einen Dialog eingegeben. Handle ist vom Typ Cardinal.

Es können Info Sets oder Einzelinformationen abgefordert werden. Die Sets dürften Stringlisten sein. Die Einzelinformationen sind Strings.

Beispiel Set:
Delphi-Quellcode:
MediaInfo_Complete_Set(false);
Memo.Text := MediaInfo_Inform(Handle);
Das Memo ist, wie kann es anders sein, ein TMemo. Einzelinfos werden mit
Delphi-Quellcode:
InfoText := MediaInfo_Get(Handle, StreamKind, StreamNumber, Parameter, KindOfInfo, KindOfSearch)
abgerufen. InfoText ist vom Typ String. Was die letzten beiden Parameter bedeuten, weiß ich nicht. Dafür habe ich die Werte aus dem Beispiel genommen. Das Handle gab es beim Öffnen der Datei. Das StreamKind bezeichnet einen bestimmten Abschnitt im InfoSet. Das sind General, Video, Audio, Text, Chapters, Image und Max. Die StreamNumber ist der Zähler für den gewünschten Stream. Der Parameter ist ein in '' eingeschlossener casesenstiver String. Er bezeichnet die gewünschte Information.

Beispiel: Abtastfrequenz der zweiten Tonspur
Delphi-Quellcode:
InfoText := MediaInfo_Get(Handle, 2, 1, 'SamplingRate_String', 1, 0);
Handle - gab's beim Öffnen der Datei,
2 - Audio,
1 - zweiter Stream,
'SamplingRate_String' - Abtastfrequenz als String, wird in kHz mit Einheit zurückgegeben,
1 - ?,
0 - ?.

Hat man alle Informationen, wird die Mediadatei wieder geschlossen:
Delphi-Quellcode:
MediaInfo_Close(Handle);
Das war es schon. Unten habe ich meine BeispielGUI angehängt. In der GUI werden in einem Memo ein InfoSet und in Editfenstern Einzelinformationen ausgegeben. Es sind einmal Source mit den beiden notwendigen DLL und einmal EXE mit DLLs. Unter D3Prof kompiliert ist die EXE 208 kB, unter D7Pers 399 kb.

Garfield 28. Okt 2004 07:54

Re: Verwenden der MediaInfo.DLL
 
Ergänzung zu

Delphi-Quellcode:
InfoText := MediaInfo_Get(Handle, StreamKind, StreamNumber, Parameter, KindOfInfo, KindOfSearch)
Delphi-Quellcode:
{     KindOfInfo  - 0 = Info_Name       : Unique name of parameter
                     1 = Info_Text       : Value of parameter
                     2 = Info_Measure    : Unique name of measure unit of
                                            parameter
                     3 = Info_Options    : InfoOption_ShowInInform    = 0
                                            InfoOption_Support         = 1
                                            -> could be N (No), R (Read only), W (Read/Write),
                                               space (Non applicable)
                                            InfoOption_ShowInSupported = 2,
                                            -> Internal use only (info : Must be showed in
                                               Info_Capacities() )
                                            InfoOption_Max             = 3
                     4 = Info_Name_Text  : Translated name of parameter
                     5 = Info_Measure_Text: Translated name of measure unit
                     6 = Info_Info       : More info about the parameter
                     7 = Info_HowTo      : Information : how data is found
                     8 = Info_Max

      KindOfSearch - Where to look for the parameter}

Amnon82 17. Mär 2006 14:51

Re: Verwenden der MediaInfo.DLL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal Deine Source auf Version 0.7.1.2 upgedated.

http://img95.imageshack.us/img95/7383/mdll07124xp.png

Garfield 25. Mär 2006 08:26

Re: Verwenden der MediaInfo.DLL
 
Danke, Amnon82.

Das Handling der DLL hat sich jeweils mit den Versionen 0.5.0.0 und 0.7.0.0 geändert. Beim letzten Mal waren die Änderungen umfangreicher, so dass die Aktualisierung notwendig war.

Bei Fr_An gibt es auch eine GUI mit Source für MediaInfo Version 0.4.*.* und 0.5.*.*. Ein Update auf die 0.7.*.* hatte er eigentlich auch geplant. In SVCDPal2DVD ist es jedenfalls enthalten.

Garfield 25. Mär 2006 21:12

Re: Verwenden der MediaInfo.DLL
 
Ich denke wegen
Delphi-Quellcode:
{*******************************************************************}
{*** Öffnen der Mediadatei / Open media file                    ***}
{*******************************************************************}
    Handle := MediaInfoA_New();
    MediaInfoA_Open(Handle,PChar(Datei));
sollte nach
Delphi-Quellcode:
   { Mediadatei schließen , close media file}

    MediaInfoA_Close(Handle);
noch ein
Delphi-Quellcode:
    MediaInfoA_Delete(Handle);
eingefügt werden.

sundance 7. Jul 2009 08:24

Re: Verwenden der MediaInfo.DLL
 
@Garfield,

sorry wenn ich den alten Thread nochmal "herauskrame"...
Ich wollte die MediaInfoDLL.pas um die Funktion "MediaInfo_Info_Version()" erweitern, die in der aktuellen DLL v0.7.18 (immer noch) enthalten ist:
Delphi-Quellcode:
interface
  function MediaInfo_Info_Version: PChar cdecl stdcall;
implementation
  function MediaInfo_Info_Version; external 'MediaInfo.Dll';
Allerdings erhalte ich beim Aufruf anstelle der Versionsnummer nur folgenden Funktionswert:
'Your software uses an outdated interface, You must use MediaInfo.DLL 0.4.1.1 instead'

Was mache ich da falsch?
Oder kann man die DLL-Versionsnummer auch anders auslesen?

Nachtrag: Die DLL aus deinem BeispielGUI (0.7.1.2) liefert das selbe Ergebnis.

Nachtrag 2: So funktionierts:
Delphi-Quellcode:
MediaInfo_Option(0,'Info_Version',''); // liefert 'MediaInfoLib - v0.7.18'
Um auch ältere Versionen der DLL zu unterstützen kann man beide auch kombinieren:
(analog zu http://www.fr-an.de, GUI MediaInfoLib)
Delphi-Quellcode:
result := MediaInfo_Info_Version();
if Pos('MediaInfoLib', result) = 0 then
  result := MediaInfo_Option(0,'Info_Version','');
.sundance.

Garfield 8. Jul 2009 14:57

Re: Verwenden der MediaInfo.DLL
 
Delphi-Quellcode:
  function String_holen : String;
  begin
    Result := '';

    @MediaInfo_Info_Version := NIL;
    @MediaInfo_Option       := NIL;
    lib := LoadLibrary(@szNameDLL[1]);
    if lib <> 0
    then try
      @MediaInfo_Info_Version := GetProcAddress(lib, @szNameMediaInfo_Info_Version[1]);
      if Assigned(MediaInfo_Info_Version)
      then Result := MediaInfo_Info_Version();

      if pos('MediaInfoLib', Result) > 0 then Exit;

      @MediaInfo_Option := GetProcAddress(lib, @szNameMediaInfo_Option[1]);
      if Assigned(MediaInfo_Option)
      then Result := MediaInfo_Option (0, 'Info_Version', '');
    except
    end;
  end;
Aus der Demo auf dieser Seite, welche Du auch gefunden hast.

sundance 15. Jul 2009 10:59

Re: Verwenden der MediaInfo.DLL
 
Garfield,

vielen Dank für deine Antwort.
Leider bin ich jetzt noch auf ein Problem gestoßen.
Wie kann ich ermitteln, ob und wieviele Kapitelmarken in einem Matroska-Container enthalten sind?

So habe ich's schon (ohne Erfolg) probiert:
Delphi-Quellcode:
FNumChapters := MediaInfoA_Get(FHandle, 0,0, 'ChaptersCount', 1,0);
FNumChapters := MediaInfoA_Get(FHandle, 4,0, 'Count', 1,0);
FNumChapters := MediaInfoA_Get(FHandle, 4,0, 'Total', 1,0);
Edit:
Für das Ermitteln der Forced- und Default-Flags habe ich auch keinen Weg gefunden...
Siehe Output von mkvinfo:
Code:
| + A track
|  + Track number: 2
|  + Track UID: 2808210362
|  + Track type: audio
|  + Enabled: 1
|  + Default flag: 1
|  + Forced flag: 1
|  + Lacing flag: 1
|  + MinCache: 0
|  + Timecode scale: 1
|  + Max BlockAddition ID: 0
|  + Codec ID: A_AC3
|  + Codec decode all: 1
|  + Default duration: 32.000ms (31.250 fps for a video track)
|  + Language: ger
|  + Audio track
|   + Sampling frequency: 48000
|   + Channels: 6

Garfield 15. Jul 2009 15:05

Re: Verwenden der MediaInfo.DLL
 
Hier gibt ein wenig zu Matroska http://forum.doom9.org/showthread.ph...492#post814492

sundance 16. Jul 2009 13:17

Re: Verwenden der MediaInfo.DLL
 
Garfield,

danke für den Hinweis im D9-Forum.
Dort habe ich (mit Hilfe des Autors von MediaInfo) folgendes in Erfahrung gebracht:
Zitat:

Chapter part is deprecated since 0.7.13.
See Changes.txt in the DLL package for more info
Und dort findet man dann:
Zitat:

0.7.12 --> 0.7.13
-----------------
- Chapters has now language type per item, another string format, and moved to the menu part
Old string format was "Chapter number : Time - chapter string"
New string format is "Time : chapter string / Optional info / Optional info"
Die Anzahl der Kapitelmarken kann man somit wie folgt auslesen:
Delphi-Quellcode:
      // Anzahl der Kapitelmarken auslesen (altes und neues Verfahren ab v0.7.13)
      FNumChapters := GetMediaInfoInt(FHandle, skGeneral, 0, 'ChaptersCount');
      if (FNumChapters = 0) then begin
        num := GetMediaInfoInt(FHandle, skGeneral, 0, 'MenuCount');
        if (num > 0) then
          for k:=0 to pred(num) do begin
            st := GetMediaInfoStr(FHandle, skMenu, k, 'StreamKind');
            if CompareText(st, 'menu') = 0 then begin
              c1 := GetMediaInfoInt(FHandle, skMenu, k, 'Chapters_Pos_Begin');
              c2 := GetMediaInfoInt(FHandle, skMenu, k, 'Chapters_Pos_End');
              FNumChapters := c2 - c1;
            end;
          end;
      end;
Das Auslesen der Flags ist im Moment leider noch nicht möglich...

.sundance.

Garfield 17. Jul 2009 10:54

Re: Verwenden der MediaInfo.DLL
 
Wenn Du nur Informationen zu Matroska willst, solltest Du Dir etwas eigenes entwickeln. Informationen findest Du auf Matroska. Dort findest auch ein Forum. Zum Team gehören unter anderem mehrere Deutsche, welche eventuell helfen würden. Moritz "Mosu" Bunkus und Christian HJ Wiesner sind zum Beispiel auch bei Doom9 | Gleitz DVD-Forum registriert. Moritz ist der Autor von MKVToolnix.

sundance 18. Jul 2009 09:12

Re: Verwenden der MediaInfo.DLL
 
Vielen Dank nochmal für deine Hilfe.
Ich habe mittlerweile noch eine interessante Matroska-Implementation gefunden:
http://www.alexander-noe.com/video/matroskadll

Für mein Progrämmchen werde ich mit nur einer "3rd-Party-DLL" nicht auskommen. Denn zum einen brauche ich eine komplette Streamübersicht (video/audio/subs/chapter/attachments), die ich z.B. mit obiger DLL oder auch mit dem output von mkvinfo von Moritz Bunkus bekommen kann. Leider kann ich über diese Schnittstellen nicht allzuviel über die Specs der einzelnen Streams (z.b. Audio-Bitrate) ermitteln; da hilft mir im Moment nur die mediainfo.dll weiter (die aber leider keine Attachments "kennt", bzw. man kann nur feststellen, ob welche da sind)...

.sundance.

Micha88 6. Jan 2010 02:10

Re: Verwenden der MediaInfo.DLL
 
Ich benutze D2009 und habe immer das Problm, dass ich nur schwarze dünne Striche sehe, statt Buchstaben und Texte.

Garfield 6. Jan 2010 08:41

Re: Verwenden der MediaInfo.DLL
 
Liegt vielleicht an Ansi und Wide.

Nero der Professor 22. Jan 2014 13:11

AW: Verwenden der MediaInfo.DLL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich weiß das Thema ist älter, aber ich habe mich gestern mit der MediaInfo.dll beschäftigt und habe mir das Beispiel von Amnon82 geladen. Ich habe die exe erzeugt und kann die Edit-felder nicht lesen.

Ich habe ein Bild anbei

könnte mir bitte jemand helfen

Gruß Nero

himitsu 22. Jan 2014 14:04

AW: Verwenden der MediaInfo.DLL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Er hat bei der ANSI-Version Mist gebaut ... PChar muß dort explizit PAnsiChar sein usw. (drum funktionierte es bis D2007 noch)

Schnelle Lösung: Verwende seine Unicode-Variante, denn die ist scheinbar korrekt implementiert.
Wobei du mit der Unicode-Version eh besser kommst, da dein Delphi sowieso Unicode ist.

[add]
Unicode und ANSI zusammengeschmissen ... je nach Delphi wird das Passende verwendet.

Nero der Professor 22. Jan 2014 17:55

AW: Verwenden der MediaInfo.DLL
 
himitsu, Tausend Dank :thumb: :thumb: :thumb:

Hat perfekt funktioniert

Gruß Nero

sintronic86 2. Feb 2015 10:56

AW: Verwenden der MediaInfo.DLL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich greif das Thema nochmal auf, weil ich leider nen kleines Problem habe.

wenn ich die heruntergeladene Exe-Datei benutze, funktioniert es (allerdings nicht für MP4-Dateien).

Sobald ich aber den Source nehme und einmal selber kompiliere, sieht es aus wie aus dem angehängten Screenshot.

Kann einer von euch was damit anfangen?

DeddyH 2. Feb 2015 11:04

AW: Verwenden der MediaInfo.DLL
 
Sieht so aus, als hättest Du einen Ansi-Source mit einem Unicode-Delphi übersetzt.

himitsu 2. Feb 2015 11:21

AW: Verwenden der MediaInfo.DLL
 
Siehe Bild in Antwort #20

Lösung: siehe die nachfolgenden Antworten

sintronic86 2. Feb 2015 11:44

AW: Verwenden der MediaInfo.DLL
 
Oh man.... Ich sollte aufhören die Threads nur zu überfliegen!!!! :oops:

Entschuldigung dafür!

Und weiß einer von euch, warum ich bei MP4-Dateien bspw. keine PlayTime bekomme?

himitsu 2. Feb 2015 11:56

AW: Verwenden der MediaInfo.DLL
 
Dateien defekt/fehlerhaft?

Oder... MP4 ist nur ein Container für verschiedne Formate ... Entweder wird das entsprechende DatenFormat nicht richtig unterstützt oder es gibt mit anderen enthaltenen Daten irgendwelche Probleme.

Kai_in_HH 23. Jun 2015 17:57

AW: Verwenden der MediaInfo.DLL
 
Hallo zusammen.

Ich habe die Doku(s) derer ich habhaft werden konnte hin und her gelesen, finde aber keine Antwort auf meine Frage.

Mein selber geklöppeltes Tool macht soweit alles richtig, liest brav die gewünschten Werte aus, versucht das aber auch bei anderen (teils) versteckten Dateien in einem Verzeichnis - z.B. der berühmten Thumbs.db. Dass da nur Quark rauskommt ist ja klar.

Was ich vermisse ist eine Funktion "MediaInfo_IsValidFile", die mir zurückgibt, ob ich überhaupt versuche eine Moviedatei, welches Format auch immer, öffnen möchte.

Ich habe es mal damit versucht die Stream-Anzahl auszulesen und bei Videofiles sollte die ja mindestens 1 sein.
Aber hier bekomme ich ein paar "false positives", nämlich bei einigen MP4-Files, die ich anstandslos auf allen möglichen Geräten abspielen kann, mein Tool ermittelt aber Stream-Anzahl Null. Während die anderen Werte (Höhe, Breite, Laufzeit,....) alle korrekt sind.

Also? Wie überprüfe ich, ob ich da überhaupt eine Moviedatei zwischen den Fingern habe?

Danke schon mal....

hathor 23. Jun 2015 19:07

AW: Verwenden der MediaInfo.DLL
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hier sind alle Infos:
https://mediaarea.net/de/MediaInfo/Support/Formats

Es gibt eine Database im Anhang.

Koloss 2. Nov 2018 00:13

AW: Verwenden der MediaInfo.DLL
 
Auch ich greife das Thema auf, hat da wer irgendetwas aktuelles für Delphi 10 und 4K MKVs?

EWeiss 2. Nov 2018 08:49

AW: Verwenden der MediaInfo.DLL
 
Zitat:

Zitat von Koloss (Beitrag 1417292)
Auch ich greife das Thema auf, hat da wer irgendetwas aktuelles für Delphi 10 und 4K MKVs?

Verstehe nicht was du aufgreifen willst.
Um was geht es?

gruss

Koloss 2. Nov 2018 09:25

AW: Verwenden der MediaInfo.DLL
 
Wie ich am besten auf die MediaInfo dll zugreifen kann, ich bräuchte die lauflänge und Bitrate von einen mkv Video.

KodeZwerg 2. Nov 2018 09:28

AW: Verwenden der MediaInfo.DLL
 
Zitat:

Zitat von Koloss (Beitrag 1417292)
Auch ich greife das Thema auf, hat da wer irgendetwas aktuelles für Delphi 10 und 4K MKVs?

Hmmm, ein Thread aus dem Jahre 2004, enthält Dinge die mit Deinem Delphi nicht kompatibel sind?
(Das ist ja mal eine Frechheit sowas!)
Aber ein paar mehr Information könnten schon hilfreich sein damit man weiß was Du möchtest oder worin das Problem liegt.

EWeiss 2. Nov 2018 09:33

AW: Verwenden der MediaInfo.DLL
 
Zitat:

Zitat von Koloss (Beitrag 1417297)
Wie ich am besten auf die MediaInfo dll zugreifen kann, ich bräuchte die lauflänge und Bitrate von einen mkv Video.

Lade die DLL in dem Speicher..
Und hole dir dann über (Hier BitRate)
Delphi-Quellcode:
MediaInfo_Get(handle, Stream_Video, iCpt, 'BitRate', Info_Text, Info_Name);


Die benötigten Informationen.

gruss

KodeZwerg 2. Nov 2018 09:38

AW: Verwenden der MediaInfo.DLL
 
Mit un4seen Bass sollte man auch ans ziel kommen.
Die hatten mal ne BassVideo, ich glaub das wurde von BassDShow oder so abgelöst.

EWeiss 2. Nov 2018 09:54

AW: Verwenden der MediaInfo.DLL
 
Zitat:

Zitat von KodeZwerg (Beitrag 1417300)
Mit un4seen Bass sollte man auch ans ziel kommen.
Die hatten mal ne BassVideo, ich glaub das wurde von BassDShow oder so abgelöst.

Vergiss den Mist!
Schon mal verwendet das du es hier als Alternative anpreist?
Sorry das ist Klugscheiss..

Zitat:

irgendetwas aktuelles für Delphi 10 und 4K MKVs?
Es ist uninteressant ob 4K oder nicht wichtig ist nur das Format in dem fall *.mkv

gruss

KodeZwerg 2. Nov 2018 10:06

AW: Verwenden der MediaInfo.DLL
 
Oki, habs vergessen. Toi toi

EWeiss 2. Nov 2018 10:18

AW: Verwenden der MediaInfo.DLL
 
Ich will mal nicht so sein.
Hier eine funktionierende Form.

In dein Projekt einbinden die Form MediaInfoForm von außen aufrufen.
Dafür sorgen das sich im Pfad die richtige Version der MediaInfo.dll befindet. (Ich habe die letzte (x64) verwendet und die *.pas dementsprechend angepasst)

Die Infos findest du dann im Memo.
Was du dann nur noch machen musst ist die beiden Funktionen aus dem Kram heraus zu parsen oder wie gezeigt alleine mit der jeweiligen Funktion auszulesen.
Die DLL ist NICHT enthalten.

gruss

Koloss 2. Nov 2018 11:47

AW: Verwenden der MediaInfo.DLL
 
Danke für deine Tipps @EWeiss!

Hier die DLL herunterladen:
https://mediaarea.net/de/MediaInfo/Download/Windows
Vom Paket die MediaInfoDLL.pas zum Projekt hinzufügen und in die Uses einbinden.
DLL zur Anwendung(EXE) dazulegen.

Code:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
  ...
  MediaInfoDLL_Load('MediaInfo.dll');
  ...
end;

procedure TfrmMain.GetMediaInfo(FileName : String; var Runtime : Integer; var Bitrate : Double);
var
  Handle: Cardinal;
  iCpt : Integer;
  Value : PWideChar;
  iHelp : Integer;
  str : String;
  P : Integer;
begin
  Handle := MediaInfo_New();
  MediaInfo_Open(Handle, PWideChar(FileName));
  Value := MediaInfo_Get(Handle, Stream_Video, 0, 'BitRate', Info_Text, Info_Name);
  iHelp := StrToIntDef(Value, 0);
  BitRate := iHelp / 1000000;
  Value := MediaInfo_Get(Handle, Stream_Video, 0, 'Duration', Info_Text, Info_Name);
  str := Value;
  P := Pos('.', str);
  str := Copy(Value, 1, P-1);
  iHelp := StrToIntDef(str, 0);
  Runtime := iHelp div 60000;
  MediaInfo_Close(Handle);
end;

EWeiss 2. Nov 2018 13:12

AW: Verwenden der MediaInfo.DLL
 
Und geht alles wie gewünscht?
iCpt wird nie verwendet kannst rausschmeißen.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz