Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Video/Audio Informationen aus diversen Formaten (https://www.delphipraxis.net/173669-video-audio-informationen-aus-diversen-formaten.html)

gee21 9. Mär 2013 20:10

Video/Audio Informationen aus diversen Formaten
 
Hi Ho alle Zusammen

Weiss jemand ob es eine Möglichkeit gibt Video Informationen einfach/sauber auszulesen?
Vor allem habe ich nun bemerkt, dass es ist nicht ganz einfach ist, wenn es verschiedene Dateiformate sind.

Klar man könnte (evt muss man ja auch) für jedes Format eine "Funktionen" schreiben aber evt gibt es ja eine einfachere Möglichkeit?
Habe mal bei Torry nach einer Komponente geschaut aber ich hab da irgendwie nichts der Art gefunden.

Es handelt sich um folgende Video Formate
*.avi;*.mpg;*.divx;*.mp4;*.mkv;
(Ich könnt mir jetzt noch vorstellen, das divx und mp4 gleich wie avi zu behandeln sind. Bin mir aber auch nicht ganz sicher)

Und ich bräuchte folgende Infos zu den Dateien:
- Tonformat (Stereo oder zB 5.1)
- Tonqualität mit der Bit Rate (zB 192Kbit)
- Video Auflösung (zB 1680x1050)
- Video Länge in Minuten


Heute habe ich mir noch überlegt, ob es eine Möglichkeit wäre die Daten in den TMediaPlayer zu laden und ob man so evt an die Informationen kommt?


Nun gut, so oder so wüsste ich nicht wie ich anstellen könnte und daher hoffe ich jemand von euch kann mir helfen.

Grüsse aus der Schweiz.

gee21 9. Mär 2013 20:58

AW: Video/Audio Informationen aus diversen Formaten
 
Oops hätte wohl etwas besser suchen müssen...

Habe soeben etwas bei SwissDelphiCenter gefunden.

http://www.swissdelphicenter.ch/de/showcode.php?id=1746


Was hier jetzt noch fehlt ist jedoch die Audio Informationen.
Zudem kriege ich den Code noch nicht zum laufen.


Ich versuch Ihn so aufzurufen:
Delphi-Quellcode:
memo1.Lines[0]:=GetProperties(form1.FileListBox1main.Items[0], MediaLength);
Warum motzt er: "Undeklarierter Bezeichner: MediaLength"? Ich hab den ja bei private und in der Procedure drin:?:

Aphton 9. Mär 2013 21:12

AW: Video/Audio Informationen aus diversen Formaten
 
Entweder für jedes Format nen Loader finden mit der du zumindest die gewünschten Informationen extrahieren kannst oder du ermittelst die Informationen selbst:
http://wotsit.org/
Ist ne gute Anlaufstelle um mehr über Dateiformate zu erfahren.

Den Medienplayer kannst du verwenden; das ist aber eher suboptimal.

Edit: Außerdem ist das Extrahieren von Metadaten nicht allzu schwer.

silver-moon-2000 9. Mär 2013 21:47

AW: Video/Audio Informationen aus diversen Formaten
 
Oder man nimmt ein "externes Programm", das für exakt diesen Zweck geschaffen wurde: MediaInfo
Das Teil beinhaltet auch eine DLL, die man einbinden und darüber so ziemlich alles, was an Audio / Video Formaten kreucht und fleucht, auslesen kann.

Aber das kann, wenn man wirklich "nur" ein einfaches Format auslesen will, ein wenig Overkill sein, das muss aber jeder für sich entscheiden.

lbccaleb 9. Mär 2013 22:30

AW: Video/Audio Informationen aus diversen Formaten
 
Zitat:

Zitat von gee21 (Beitrag 1206658)
Und ich bräuchte folgende Infos zu den Dateien:
- Tonformat (Stereo oder zB 5.1)
- Tonqualität mit der Bit Rate (zB 192Kbit)
- Video Auflösung (zB 1680x1050)
- Video Länge in Minuten

Videolänge:
http://www.delphipraxis.net/1079162-post12.html


Und der Rest ist ähnlich auch zu besorgen.
Ich würde da auch sowas wie DirectShow benutzen, da der TMediaPlayer nicht überall korrekte Werte ausgibt.

p80286 9. Mär 2013 23:14

AW: Video/Audio Informationen aus diversen Formaten
 
Zitat:

Zitat von gee21 (Beitrag 1206660)
Ich versuch Ihn so aufzurufen:
Delphi-Quellcode:
memo1.Lines[0]:=GetProperties(form1.FileListBox1main.Items[0], MediaLength);
Warum motzt er: "Undeklarierter Bezeichner: MediaLength"? Ich hab den ja bei private und in der Procedure drin:?:

Ein kleines bischen mehr an Sourcecode wäre jetzt hilfreich.
Compiler irren im allgemeinen seltener als Programmierer.

Gruß
K-H

gee21 9. Mär 2013 23:24

AW: Video/Audio Informationen aus diversen Formaten
 
HI all

Und danke für die Tipps.
Mal schauen ob ich das noch hinkriege ;-D




Zitat:

Ein kleines bischen mehr an Sourcecode wäre jetzt hilfreich.
Dies ist der SourceCode von SwissDelphiCenter. Ich habe Ihn so beim mir im Prog übernommen. Nur bin ich nicht fähigihn richtig aufzurufen... :-)


Delphi-Quellcode:

unit MPlayerUnit;

interface

 uses
   Forms, Classes, Controls, MPlayer;

type
   THiddenForm = class(TForm)
     MediaPlayer: TMediaPlayer;
   public
     procedure GetProperties(FileName: string;
       var MediaFrames, MediaLength, MediaWidth, MediaHeight: Integer);
   end;

var
   HiddenForm: THiddenForm;

implementation

{$R *.dfm}

procedure THiddenForm.GetProperties(FileName: string;
   var MediaFrames, MediaLength, MediaWidth, MediaHeight: Integer);
begin
   MediaPlayer.FileName := FileName;
   MediaPlayer.Wait    := False;
   MediaPlayer.Open;
   MediaPlayer.TimeFormat := tfFrames;
   MediaFrames := MediaPlayer.Length;
   MediaPlayer.TimeFormat := tfMilliseconds;
   MediaLength := MediaPlayer.Length;
   MediaPlayer.DisplayRect := Rect(1, 1, 0, 0); {"0, 0" forces resolution autodetect}
   MediaWidth := MediaPlayer.DisplayRect.Right;
   MediaHeight := MediaPlayer.DisplayRect.Bottom;
   if (MediaWidth <= 0) or (MediaHeight <= 0) then
   begin {invalid values mean not video}
     MediaWidth := 0;
     MediaHeight := 0;
   end;
   MediaPlayer.Close;
end;

end.

Volker Z. 9. Mär 2013 23:40

AW: Video/Audio Informationen aus diversen Formaten
 
Hallo Robert,

Zitat:

Ich versuch Ihn so aufzurufen:
Delphi-Quellcode:
memo1.Lines[0]:=GetProperties(form1.FileListBox1main.Items[0], MediaLength);

kann doch gar nicht funktionieren. GetProperties ist eine procedure, die liefert keinen Wert zurück. Und, dann musst Du schon alle Parameter übergeben, MediaLength alleine reicht nicht.
Wo ist den eigentlich memo1 und MediaLength deklariert? Wenn MediaLength eine Property von Form1 und Memo1 eine Property von FormN ist, Du den Aufruf irgendwo in FormN vornimmst, dann hat der Compiler wohl recht, oder heißt die Property vielleicht FMediaLength?

Gruß

gee21 10. Mär 2013 00:19

AW: Video/Audio Informationen aus diversen Formaten
 
HI Volker

Hui, schon schwer deine Nachricht richtig zu lesen und jetzt noch zu beantworten :-)

Also vielleicht habe ich vorhin etwas falsch geschrieben. Ich habe den Code auf meiner Form1 eingefügt. Auf der wollte ich Ihn auch aufrufen.

also habe ich einfach ein Teil abgeändert auf: Tform1

Delphi-Quellcode:
 procedure [COLOR="Red"]Tform1[/COLOR].GetProperties(FileName: string;
   var MediaFrames, MediaLength, MediaWidth, MediaHeight: Integer);
begin
   MediaPlayer.FileName := FileName;
   MediaPlayer.Wait    := False;
   MediaPlayer.Open;
   MediaPlayer.TimeFormat := tfFrames;
   MediaFrames := MediaPlayer.Length;
   MediaPlayer.TimeFormat := tfMilliseconds;
   MediaLength := MediaPlayer.Length;
   MediaPlayer.DisplayRect := Rect(1, 1, 0, 0); {"0, 0" forces resolution autodetect}
   MediaWidth := MediaPlayer.DisplayRect.Right;
   MediaHeight := MediaPlayer.DisplayRect.Bottom;
   if (MediaWidth <= 0) or (MediaHeight <= 0) then
   begin {invalid values mean not video}
     MediaWidth := 0;
     MediaHeight := 0;
   end;
   MediaPlayer.Close;
end;
Dies habe ich nun auf Form1 bei Private drinn:
Delphi-Quellcode:
 private
 { Private-Deklarationen }
appdir: String;
function RunCaptured(const _dirName, _exeName, _cmdLine: string): Boolean;
procedure GetProperties(FileName: string; var MediaFrames, MediaLength, MediaWidth, MediaHeight: Integer);

public
    { Public-Deklarationen }

Wie / wo pflanze ich den das Memo nun ein?

Volker Z. 10. Mär 2013 00:51

AW: Video/Audio Informationen aus diversen Formaten
 
Hallo Robert,

also die GetProperties ist ja nun einen Methode Deiner TForm1. Wenn Du das Memo auf Dein TForm1 "pflanzt", in Deiner private Deklaration noch folgendes einfügst / änderst:
Delphi-Quellcode:
  TForm1 = class (TForm)
  private
    FMediaFrames : Integer;
    FMediaLength : Integer;
    FMediaWidth : Integer;
    FMediaHeight : Integer;
    procedure GetProperties (const Filename : string);
  end;
und dann die Parameter der Methode noch anpasst
Delphi-Quellcode:
procedure TForm1.GetProperties (FileName : string);
begin
   MediaPlayer.FileName := FileName;
   MediaPlayer.Wait := False;
   MediaPlayer.Open;
   MediaPlayer.TimeFormat := tfFrames;

   FMediaFrames := MediaPlayer.Length;

   MediaPlayer.TimeFormat := tfMilliseconds;

   FMediaLength := MediaPlayer.Length;

   MediaPlayer.DisplayRect := Rect(1, 1, 0, 0); {"0, 0" forces resolution autodetect}

   FMediaWidth := MediaPlayer.DisplayRect.Right;
   FMediaHeight := MediaPlayer.DisplayRect.Bottom;

   if (FMediaWidth <= 0) or (FMediaHeight <= 0) then
   begin {invalid values mean not video}
     FMediaWidth := 0;
     FMediaHeight := 0;
   end;
   MediaPlayer.Close;
end;
kannst Du mit
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  GetProperties (Form1.FileListBox1main.Items[0]);
  Memo1.Text := Format ('Frames %d Länge %d Breite %d Höhe %d', [FMediaFrames, FMediaLength, FMediaWidth, FMediaHeight])
end;
ins Memo schreiben.

Ich hoffe es hilft.

Gruß, und sorry, dass meine Antwort schwer verdaulich war


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 Uhr.
Seite 1 von 2  1 2      

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