Ich bin ja extrem begeistert von Libraries, die ihren Zweck genau so erfüllen, wie man es als Anwender / Entwickler wünscht. Die letzte Lobeshymne sang ich auf PHPQRCode, eine exzellente Library, die QR-Codes aus PHP heraus erzeugt.
Hier und heute geht es um einen weiteren Vertreter dieser „Tut genau was sie soll“ – Libraries: getid3. Letztens auf Arbeit sah ich mich mit dem Problem konfrontiert, Videoinformationen auf PHP-Seite auslesen zu müssen und das möglichst ohne Verrenkungen wie mit ffmpeg-php.
getid3 spuckt zu Videos die gewünschten Informationen aus: Datenformat, Codec, Auflösung und Framerate. Dabei zu beachten ist, dass getid3 nur auf den id3-Tags arbeitet und nicht das Video selbst untersucht. Heißt: Um böswillige, id3-Tag manipulierende Nutzer abzuhalten, ist getid3 ungeeignet und eine direkt auf dem Video operierende Lösung wie das oben genannte ffmpeg-php wird wieder interessanter.
Zur Verwendung
Kurz und schmerzlos wie es sein soll:
<?php require_once "getid3/getid3.php"; $getID3 = new getID3; $file = $getID3->analyze("WMFRA41_1.m4v"); echo "<pre>" . print_r($file['video'], true) . "</pre>"; /* Array ( [dataformat] => quicktime [resolution_x] => 1280 [resolution_y] => 720 [fourcc] => avc1 [frame_rate] => 600 ) */
Lässt man sich das komplette $file – Array ausgeben, zeigt sich getid3 von seiner gesprächigen Seite und liefert noch Informationen zu den einzelnen Streams, die in der Datei intergriert sind. Aber getid3 ist logischerweise nicht auf Videos limitiert. Noch 2 Kostproben:
mp3-Handling
<?php require_once "getid3/getid3.php"; $getID3 = new getID3; $file = $getID3->analyze("Ace of Base - The sign.mp3"); echo "<pre>" . print_r($file['audio'], true) . "</pre>"; /* Array ( [dataformat] => mp3 [channels] => 2 [sample_rate] => 44100 [bitrate] => 128000 [channelmode] => dual channel [bitrate_mode] => cbr [lossless] => [encoder_options] => CBR128 [compression_ratio] => 0.090702947845805 [streams] => Array ( [0] => Array ( [dataformat] => mp3 [channels] => 2 [sample_rate] => 44100 [bitrate] => 128000 [channelmode] => dual channel [bitrate_mode] => cbr [lossless] => [encoder_options] => CBR128 [compression_ratio] => 0.090702947845805 ) ) ) */
png-Handling (gekürzte Form)
<?php require_once "getid3/getid3.php"; $getID3 = new getID3; $file = $getID3->analyze("file.png"); echo "<pre>" . print_r($file['png'], true) . "</pre>"; /* Array ( [IHDR] => Array ( ... [width] => 966 [height] => 796 [raw] => Array ( [bit_depth] => 8 [color_type] => 6 [compression_method] => 0 [filter_method] => 0 [interlace_method] => 0 ) [compression_method_text] => deflate/inflate [color_type] => Array ( [palette] => [true_color] => 1 [alpha] => 1 ) ) ... */
Sollte man definitiv im Hinterkopf behalten, wenn sowas benötigt wird.
Die Library funktioniert leider nicht mit allen meiner MP4 Dateien!