![]() |
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. |
AW: Video/Audio Informationen aus diversen Formaten
Oops hätte wohl etwas besser suchen müssen...
Habe soeben etwas bei SwissDelphiCenter gefunden. ![]() 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:
Warum motzt er: "Undeklarierter Bezeichner: MediaLength"? Ich hab den ja bei private und in der Procedure drin:?:
memo1.Lines[0]:=GetProperties(form1.FileListBox1main.Items[0], MediaLength);
|
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:
![]() 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. |
AW: Video/Audio Informationen aus diversen Formaten
Oder man nimmt ein "externes Programm", das für exakt diesen Zweck geschaffen wurde:
![]() 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. |
AW: Video/Audio Informationen aus diversen Formaten
Zitat:
![]() 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. |
AW: Video/Audio Informationen aus diversen Formaten
Zitat:
Compiler irren im allgemeinen seltener als Programmierer. Gruß K-H |
AW: Video/Audio Informationen aus diversen Formaten
HI all
Und danke für die Tipps. Mal schauen ob ich das noch hinkriege ;-D Zitat:
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. |
AW: Video/Audio Informationen aus diversen Formaten
Hallo Robert,
Zitat:
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ß |
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:
Dies habe ich nun auf Form1 bei Private drinn:
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;
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? |
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:
und dann die Parameter der Methode noch anpasst
TForm1 = class (TForm)
private FMediaFrames : Integer; FMediaLength : Integer; FMediaWidth : Integer; FMediaHeight : Integer; procedure GetProperties (const Filename : string); end;
Delphi-Quellcode:
kannst Du mit
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;
Delphi-Quellcode:
ins Memo schreiben.
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; Ich hoffe es hilft. Gruß, und sorry, dass meine Antwort schwer verdaulich war |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 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