FileAnalyzer

Das Pfad-Konzept

Der FileAnalyzer versteht die innere Struktur von Dateien, also die aneinander gereiten oder ineinander verschachtelten Chunks, Blöcke und Elemente innerhalb einer Binärdatei, ähnlich einem Dateisystem oder einer Ordnerstruktur, so dass jedes Element, jeder Chunk und jeder Block darin eindeutig über einen Pfad adressiert und gefunden werden kann.

In diesem Artikel möchten wir uns dieses Pfad-Konzept des FileAnalyzers genauer ansehen. Dabei gehen wir unter anderem darauf ein, wie Sie mit gleichnamigen und damit mehrdeutigen Pfaden umgehen können und geben Ihnen Tipps, wie Sie leichter mit Pfaden arbeiten können. Wir beginnen jedoch mit einem einfachen Beispiel aus der Praxis, das dieses Pfad-Konzept verdeutlicht.

Beispiel für einen Pfad

Als Beispiel für die Nutzung eines Pfades möchten wir uns das ISO Base Media File Format ansehen, ein Containerformat, mit dem zum Beispiel Bilder, Videos und Audio-Dateien der Formate MP4, M4A, MOV, 3GP, HEIC, HEIF, AVIF oder CR3 gespeichert sind. Eine MP4-Videodatei oder eine M4A-Audiodatei enthält auf der ersten Ebene typischerweise Chunks wie die File Type Box (ftyp), den Media Data Container (mdat) oder die Movie Box (moov). Diese Chunks können wir über die Erste-Ebene-Pfade /ftyp, /mdat oder /moov ansprechen.

Wenn wir nun eine Eigenschaft wie zum Beispiel die Spieldauer einer dieser Dateien auslesen möchten, müssen wir tiefer in die Dateistruktur eintauchen. Die Spieldauer von MP4-Videos oder M4A-Audios ist im Track Header (tkhd) hinterlegt. Der Track Header befindet sich im Track Container (trak), der sich wiederum innerhalb der Movie Box (moov) befindet. Da sich die Movie Box auf der ersten Ebene befindet sind wir damit fertig und es ergibt sich entsprechend der Pfad "/moov/trak/tkhd", den wir für unsere Aufgabe verwenden können.

Mehrdeutige Pfade

Manche Dateien können auch mehrere gleichnamige und damit mehrdeutige Pfade enthalten. Während Audiodateien typischerweise nur einen einzelnen Audio-Track enthalten, können Videodateien zum Beispiel sowohl eine Audiospur als auch eine Videospur haben. MP4-Dateien, die sowohl einen Audio-Track als auch einen Video-Track umfassen, enthalten daher unterhalb ihrer Movie Box (moov) gleich zwei Track Container, die beide den gleichen Namen "trak" haben. In diesem Fall ist unser Pfad "/moov/trak/tkhd" aus dem letzten Beispiel dadurch natürlich nicht mehr eindeutig. Um den Pfad eindeutig zu machen, nummeriert der FileAnalyzer solche Pfade mit einem Index beginnend bei 0. Der erste Pfad einer solchen Datei wäre demnach eindeutig über "/moov/trak[0]/tkhd" zu erreichen, der zweite über "/moov/trak[1]/tkhd".

Wenn wir also zum Beispiel in der Suchfunktion des FileAnalyzers einen dieser beiden Pfade mit Index verwenden, suchen wir nur in dem jeweiligen (ersten oder zweiten) Pfad und nicht in beiden. Verwenden wir dagegen den selben Pfad ohne Index (hier also "/moov/trak/tkhd"), würde die Suche sowohl den Audio-Track-Header als auch den Video-Track-Header durchsuchen. Wir können mit dem Weglassen oder der Angabe eines Indexes also steuern, ob wir einen bestimmten oder alle Chunks des jeweiligen Typs meinen.

Pfade direkt aus Dateien ablesen und kopieren

Natürlich müssen wir nicht auswendig wissen, welche Eigenschaften in welchem Pfad eines Dateiformats gespeichert sind. Öffnen Sie einfach eine Datei Ihrer Wahl im FileAnalyzer und stöbern Sie mithilfe der Baumstruktur auf der linken Seite des Programms in der Datei oder nutzen Sie die Suchfunktionen um bestimmte Eigenschaften zu finden.

Wenn Sie ein Element innerhalb der Baumstruktur ausgewählt haben, wird Ihnen der jeweilige Pfad dieses Elementes automatisch unterhalb der Baumstruktur angezeigt. Wenn Sie mit der rechten Maustaste auf das Element klicken, lässt sich der Pfad darüber hinaus bequem in die Zwischenablage kopieren, so dass Sie den Pfad nicht manuell eingeben müssen und zum Beispiel direkt in Ihre Skripte für die Skriptsteuerung des FileAnalyzers kopieren können.

Pfade direkt für Suchen oder Vergleiche verwenden

Darüber hinaus können Sie Suchen innerhalb eines Pfades oder Vergleiche von Pfaden auch direkt aus der Dateistruktur oder der Detailtabelle des FileAnalyzers starten, ohne den Pfad manuell eingeben zu müssen.

Klicken Sie dafür einfach im Hauptfenster des FileAnalyzers auf der rechten Seite in der Baumstruktur der Dateistruktur-Ansicht mit der rechten Maustaste auf ein Element und wählen Sie anschließend aus dem Kontextmenü "Pfad durchsuchen" oder "Pfad vergleichen" um automatisch die entsprechenden Suchdialoge vorausgewählt mit diesem Pfad zu starten. Falls Sie auf diese Weise einen Pfad erwischen, der nicht eindeutig ist, erhalten Sie gleich zwei Einträge im Kontextmenü. Mit "an dieser Position" nutzen Sie den Pfad wie oben beschrieben mit Index, also nur innerhalb dieses eindeutigen Elementes (dieser oder mehrerer Dateien). Mit "an allen Positionen" nutzen Sie den Pfad dagegen ohne Index, das heißt Sie würden die Suche oder den Vergleich über alle gleichnamigen Pfade (dieser oder mehrerer Dateien) ausführen.

Ähnlich verhält es sich mit einem Rechtsklick auf Einträge in der Tabelle "Details" im Hauptfenster des FileAnalyzers. Auch hier erhalten Sie über das Kontextmenü die Möglichkeit, Eigenschaften im ausgewählten Pfad nur an dieser oder an allen gleichnamigen Positionen zu suchen oder zu vergleichen.

Eigenschaften in Pfaden adressieren

Das Pfad-Konzept kann auch dazu genutzt werden, einzelne oder mehrere Eigenschaften, die in einem Pfad gespeichert sind, zu adressieren. Die Eigenschaften sind dafür mit einem Doppelpunkt von dem Pfad zu trennen, wie das nächste Beispiel für die Eigenschaft "Duration" (Spieldauer) im Pfad "/moov/trak/tkhd" zum Track Header von ISOBMFF-Dateien zeigt:

/moov/trak/tkhd:Duration

Um mehrere Eigenschaften zu adressieren, sind diese mit einem Komma voneinander zu trennen. Das nächste Beispiel zeigt dies für die Eigenschaften Width und Height (Breite und Höhe) im Image Header (Pfad "/ihdr") von PNG-Bildern:

/ihdr:Width,Height

Nutzbar ist diese Möglichkeit, die Pfad-Angabe auf einzelne Eigenschaften zu beschränken, zum Beispiel für die Vergleichsfunktion des FileAnalyzers, die nicht nur den Vergleich ganzer Elemente mit all ihren darin enthaltenen Eigenschaften innerhalb der Struktur von Dateien erlaubt, sondern auch nur einzelner Eigenschaften daraus.

Das ist alles, was Sie zum Pfad-Konzept im FileAnalyzer wissen sollten.