Felix Riesterer: MP4 - Abmessungen und Aspect Ratio

Liebe Mitleser,

ich möchte serverseitig die Abmesungen eines Videos im mp4-Format bestimmen. Dabei möchte ich nicht auf das Vorhandensein von ffmpeg angeweisen sein, sondern ähnlich wie damals bei FLV eine kleine schlanke Funktion (oder auch Klasse) schreiben, um an die Informationen zu gelangen.

MP4 ist offensichtlich ein Containerformat, in welchem verschiedene Video- und Audio-Codecs verwendet werden können, sodass also zwei MP4-Videodateien mit unterschiedlichen Codecs erstellt worden sein können.

Die Spezifikationen zum MP4-Format oder auch zum H.264-Codec sind mir eindeutig zu hoch, damit komme ich absolut nicht klar. Bisher habe ich getid3 und yamdi gefunden, jedoch hat getid3 nicht bei jedem Testvideo die gewünschten Informationen ermitteln können, und yamdi ist in C geschrieben... und ich bräuchte PHP und kann noch kein C um die Klasse zu portieren. Wenn ich den Mechanismus von YAMDI nachvollziehen könnte, um das Verhalten wie in meiner FLV-Dimensionen-Klasse testen zu können, dann wäre ich ja schon sehr glücklich! Dabei hat yamdi anscheinend das Potential, meine FLV-Klasse komplett zu ersetzen, weil es viel leistungsfähiger ist.

Meine Frage: Wer hat dieses Problem schon einmal lösen können?

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  1. Hallo, Felix!

    Das Problem dabei ist, dass das MP4-Format solche Informationen nicht im Header, sondern im Container unterbringt, da jedes Stream-Element seine eigenen Größen-/Aspect-Infos haben kann.

    Was yamdi angeht: mit ziemlicher Sicherheit kann man dazu auch einen PHP-Wrapper bauen.

    Gruß, LX

    --
    RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
    RFC 1925, Satz 11a: Siehe Regel 6a
    1. Lieber LX,

      Das Problem dabei ist, dass das MP4-Format solche Informationen nicht im Header, sondern im Container unterbringt

      AHA! Wieder etwas dazugelernt. Danke!

      Was yamdi angeht: mit ziemlicher Sicherheit kann man dazu auch einen PHP-Wrapper bauen.

      Das klingt sehr verführerisch... Wie macht man das? Der Quelltext sieht fast schon wie PHP aus (logisch, die Syntax ist ja an C angelehnt), und es ist auch nur ein Einzelscript ohne irgendwelche Includes (außer von den anscheinend üblichen Helferbibliotheken).

      Also: Wie müsste ich das anstellen, um entweder
      1.) einen Wrapper zu bauen
      oder
      2.) die Bibliothek nach PHP zu portieren?

      Zum Anschauen habe ich die Quelldatei von YAMDI einmal auf meinen Webspace hochgeladen: yamdi.c.txt

      Noch wollte ich den Autor der Bibliothek nicht belästigen...

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Ich habe mir das gerade mal angesehen. Offenbar ist yamdi gar nicht so komplex, so dass es auch möglich sein sollte, die wesentliche Funktionalität in PHP abzubilden (auch wenn diese Sprache keinen direkten Speicherzugriff erlaubt wie C und man sich daher an einigen Stellen mit unpack behelfen muss).

        Gruß, LX

        --
        RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
        RFC 1925, Satz 11a: Siehe Regel 6a
        1. Lieber LX,

          Offenbar ist yamdi gar nicht so komplex

          das mag wohl so sein, jedoch sieht es für mich mangels fundierter C-Kenntnisse sehr komplex aus.

          so dass es auch möglich sein sollte, die wesentliche Funktionalität in PHP abzubilden

          Da frage ich dann doch lieber erst einmal den Autor, ob er das für PHP schon gemacht hat...

          (auch wenn diese Sprache keinen direkten Speicherzugriff erlaubt wie C und man sich daher an einigen Stellen mit unpack behelfen muss).

          Meintest Du unpack? Tja, wenn ich jetzt wüsste, wo und wie ich das auch noch einsetzen sollte.

          Liebe Grüße,

          Felix Riesterer.

          --
          ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)