AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Video/Audio Informationen aus diversen Formaten
Thema durchsuchen
Ansicht
Themen-Optionen

Video/Audio Informationen aus diversen Formaten

Ein Thema von gee21 · begonnen am 9. Mär 2013 · letzter Beitrag vom 11. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2      
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#1

Video/Audio Informationen aus diversen Formaten

  Alt 9. Mär 2013, 20:10
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.
Robert
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Video/Audio Informationen aus diversen Formaten

  Alt 9. Mär 2013, 20:58
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:
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
Robert
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Video/Audio Informationen aus diversen Formaten

  Alt 9. Mär 2013, 21:12
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.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#4

AW: Video/Audio Informationen aus diversen Formaten

  Alt 9. Mär 2013, 21:47
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.
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Video/Audio Informationen aus diversen Formaten

  Alt 9. Mär 2013, 22:30
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.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Video/Audio Informationen aus diversen Formaten

  Alt 9. Mär 2013, 23:14
Ich versuch Ihn so aufzurufen:
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Video/Audio Informationen aus diversen Formaten

  Alt 9. Mär 2013, 23:24
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.
Robert
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#8

AW: Video/Audio Informationen aus diversen Formaten

  Alt 9. Mär 2013, 23:40
Hallo Robert,

Zitat:
Ich versuch Ihn so aufzurufen:
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ß
Volker Zeller
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Video/Audio Informationen aus diversen Formaten

  Alt 10. Mär 2013, 00:19
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?
Robert
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#10

AW: Video/Audio Informationen aus diversen Formaten

  Alt 10. Mär 2013, 00:51
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
Volker Zeller
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr.
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