metadaten von videos bestimmen

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
almatic
Beiträge: 25
Registriert: So 10. Aug 2008, 01:56

metadaten von videos bestimmen

Beitrag von almatic »

Hi,

ich versuche ein frontend für ffmpeg zu schreiben und suche nach einer Möglichkeit, Metadaten von Videos zu bestimmen (größe, codecs usw.). Mplayer kann ich nehmen (wird eh von der Anwendung vorausgesetzt), der Aufruf dauert aber zu lange, beim Öffnen von ~100 files ist die anwendung ewig lange blockiert.
Weiß einer eine Möglichkeit ?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Mir würde nur einfallen die Procedure die für das abfragen zuständig ist in einen Thread zu lagern. Ich meine mit XINE ist sowas auch direkt möglich.

Wie greifst du den auf ffmpeg zurück ? über eine LIB? oder über einen Aufruf von einem Externen Programm ?

Wenn letzteres zutrifft:
http://wiki.lazarus.freepascal.org/Exec ... rograms/de" onclick="window.open(this.href);return false;
MFG
Michael Springwald

almatic
Beiträge: 25
Registriert: So 10. Aug 2008, 01:56

Beitrag von almatic »

Hi,

ich wollte möglichst keinen Fremdcode nehmen, der das Programm durch Lizenszwang belastet, deswegen rufe ich nur extern auf. Gibts denn überhaupt libs für videobearbeitung in irgendeiner Form ?
Sorry dass ich so doof frage, habe zwar gesucht, aber nur mittels google usw., Habe gar keine Ahnung von freepascal und wo man da gute Ressourcen findet. Habe auch noch nie was in Pascal gemacht. Das Programm habe ich gestern mal angefangen. So siehts im Moment aus: siehe Anhang

Wie man sieht, sollen einige der Infos als subitems in das Listview-Widget rein und da liegt das Problem. Für jedes Info-Item wird 'mplayer [...] -identify' einmal aufgerufen. Da die Daten zu den Videos in einem dynamischen Array gespeichert sind, würde ein eigener Thread wohl die Indizes völlig durcheinander bringen.
Wenn ich weniger als 20 Files gleichzeitig öffne, ist alles ok und die Verzögerung erträglich, bei 20-50 Files dauerts zu lange und bei >50 Files gibts nen segmentation fault :P
Kann auch den Code mal posten, wenn das hilft.
Dateianhänge
9sex5tvq.jpg

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Sieht doch schon gut aus. Mir sind leider keine wirklichen libs bekannt für Lazarus die sich um Videos kümmern. Man müsste also auf eine vorhandene Lib aufsetzen und die umwandeln nach Pascal. Wenn das Projekt nur unter Linux laufen soll währe es relativ einfach, ich könnte dir mein XINE Header geben, die ich unter Lazarus zum Laufen bekommen habe.

Die müssten auch für das auslesen der "Meta Daten" was bereitstellen.

Für Windows sieht das ganze schon anders aus.
Bei Windows könntest versuchen auf der WINAPI aufzustehen, aber leicht wird es nicht.

Windows bietet ja die Möglichkeit an z.b. den Media Player einzubinden, ob das auch unter Lazarus geht weiß ich nicht.
Aber auch Winamp soll dies über seine API können.

Dein vorhaben ist nicht ganz einfach.

Letzte Möglichkeit: Selbst eine Lib zu erstellen die sich um das auslesen der Meta Daten kümmert. Dürfte aber nicht so einfach werden. Daher würde ich auch einfach auf FFMpeg aufsetzten.

statt ein dynamischen array würde ich evlt. eine TObjectList nehmen, aber schneller ist das dadurch nicht. Zum auslesen könntest du aber durchaus einen Thread nehmen, der es der reihe nach abarbeitet, so würde der User schonmal die ersten Daten sehen, die das Programm ausgelesen hat.

Außerdem könntest du noch zeit sparen in dem du in deiner ListBox(ist doch eine oder?
beim hinzufügen Folgnedes einbaust: UpdateBeging und UpdatetEnd.
müsste unter Listbox1.items zu finden sein.

Hast du dir mal mein Link angeschaut ? da gibt es ein bereich, der etwas für dein sein dürfte....

PS: Ich Wusste gar nicht das Lazarus ein OS ist(steht in deiner Signatur bzw. hast du angeben bei OS *G*
MFG
Michael Springwald

almatic
Beiträge: 25
Registriert: So 10. Aug 2008, 01:56

Beitrag von almatic »

pluto hat geschrieben: statt ein dynamischen array würde ich evlt. eine TObjectList nehmen, aber schneller ist das dadurch nicht.
das sind die Sachen, die man einfach wissen muss :P Die dynamischen arrays standen in der Doku auf der 1. Seite, deswegen hab ich das gleich genommen. Die opjectlist schaue ich mir mal an.
Außerdem könntest du noch zeit sparen in dem du in deiner ListBox(ist doch eine oder?
beim hinzufügen Folgnedes einbaust: UpdateBeging und UpdatetEnd.
müsste unter Listbox1.items zu finden sein.
ist ein TListView. Ganz vertraut bin ich mit dem Ding auch noch nicht, bspw. ist es mir nicht gelungen subitems nachträglich einzufügen, also wenn die Items schon alle drinstehen. Es geht nur gleichzeitig mit dem Einfügen der Items, also:

Item:=ListView1.Items.Add;
Item.Caption:=vitemlist.basename;
Item.SubItems.Add(vitemlist.vcodec);
Item.SubItems.Add(vitemlist.acodec);

aber wie bekomme ich subitems rein, wenn ich zum Beispiel schon 5 items drinstehen habe, und will subitems für item1 hinzufügen ?

Hast du dir mal mein Link angeschaut ? da gibt es ein bereich, der etwas für dein sein dürfte....


jetzt grade ;) Das könnte tatsächlich die Lösung des Problems sein (das mit dem großen output). Werde das ausprobieren.

PS: Ich Wusste gar nicht das Lazarus ein OS ist(steht in deiner Signatur bzw. hast du angeben bei OS *G*


ich hab nur die Standardvorgaben im Profil verändert, keine Ahnung, warum die Form jetzt versaut ist. Bei dir steht das übrigens auch so ;)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

schau dir mal wegen den Pascal Grundlagen diesen Link an:
http://www.delphi-treff.de/sprachen/object-pascal/" onclick="window.open(this.href);return false;
das ist zwar für Delphi. aber ein großen Teil kannst du auch unter Lazarus verwenden.

Wenn du schon einen Eintrag hast und möchtest SubItems hinzufügen ist das ganz einfach:
ListView1.items[0].subitems[0]:='test'
wobei 0 währe hier der Zweite Eintrag. Der erste währe Caption also:
Listview1.Items[0].Caption:='test';

das geht aber nur wenn es den Eintrag 0 auch gibt in der liste.
In deinen Fall also z.b.:
ListView1.items[0].subitems.add('test')
fügt Einträge Hinten in der liste ein.

Ich hoffe das hilft dir etwas weiter. Was verwendest du denn für ein Betriebssystem ?
Der ListView Header sieht mir zu fremd aus....
MFG
Michael Springwald

almatic
Beiträge: 25
Registriert: So 10. Aug 2008, 01:56

Beitrag von almatic »

Hi,

danke dir schonmal für die Hilfe.
Betriebssystem ist Debian Lenny/Sid mit kde (qtcurve theme, deswegen sehen die Header so aus).

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Ach so. Weil das System habe ich auch.
Debian Lenny/ aber ein anders Theme.....

Ich finde es auch blöd das es im Video Bereich noch nix passendes gibt für Lazarus. Was wirklich Plattform unabhängig ist.

Wir müssten letztendlich auch nur eine Video Lib finden die auf verschiedene Betriebssystemen läuft. Und die wir für Lazarus anpassen können.

Leider hört es sich wieder einfacher an als es ist. Ob man auf die mplayer sachen aufbauen kann ? der ist ja recht gut unter Linux. oder auf VLC ?
Die sind beide OpenSoruce.
MFG
Michael Springwald

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

Vielleicht hilft das ja ein wenig:
http://www.khronos.org/openml/" onclick="window.open(this.href);return false;
http://community.freepascal.org:10000/b ... _id=110921" onclick="window.open(this.href);return false;
http://community.freepascal.org:10000/l ... une/005385" onclick="window.open(this.href);return false;
http://www.cg.tuwien.ac.at/~knapp/graph ... frame.html" onclick="window.open(this.href);return false;

Ich weiß, die Ergebnisse sind nicht das "Gelbe vom Ei", aber ein Anhaltspunkt.

(geht es jetzt eigentlich NUR um die Metadaten, oder auch um das Abspielen?)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Mir Persönlich würde es schon um beides gehen.

edit01:
Die LInks sind gut... Evlt. werde ich mal einige "Libs" davon ausprobieren.
MFG
Michael Springwald

almatic
Beiträge: 25
Registriert: So 10. Aug 2008, 01:56

Beitrag von almatic »

mir gehts jetzt nur um die metadaten.

Das Programm soll im Prinzip eine open-source Alternative zu SUPER sein, die auf allen Betriebssystemen läuft, welche mplayer/ffmpeg installiert haben.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

soviel wie ich weiß gibt es doch eine Lib für den MPlayer oder FFmpeg. Die frage ist aber ob die schon für FPC verfügbar ist, wenn nicht, sollten wir das "einfach" nachholen *G*
MFG
Michael Springwald

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6856
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

pluto hat geschrieben:wir
Klingt wie eine Drohung.

BTW. wie wäre es mal good old google und die wiki zu bemühen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Das habe ich schon mal Tage lang versucht. Entweder bedine ich die Suche Falsch oder ich finde einfach nix. Das es nix gibt, das glaube ich auch nicht. Ich habe mir sogar auch schon Soruce-Codes vom Mplayer angeschaut. Aber geholfen hat das leider nicht viel.... :(
Klingt wie eine Drohung.
Warum ? ist doch erst das zweite mal das ich sowas vorschlage. *G*
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Er meint das du immer wir sagst wenn du von was keine ahnung hast es aber willst... "sollen wir das einfach nacholen" ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten