{"id":682,"date":"2012-10-29T10:00:16","date_gmt":"2012-10-29T09:00:16","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=682"},"modified":"2012-10-29T12:21:56","modified_gmt":"2012-10-29T11:21:56","slug":"videoinformationen-in-php-auslesen","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/videoinformationen-in-php-auslesen\/","title":{"rendered":"Videoinformationen in PHP auslesen"},"content":{"rendered":"<p>Ich bin ja extrem begeistert von Libraries, die ihren Zweck genau so erf\u00fcllen, wie man es als Anwender \/ Entwickler w\u00fcnscht. Die letzte Lobeshymne sang ich auf <a href=\"http:\/\/phpqrcode.sourceforge.net\/\">PHPQRCode<\/a>, eine exzellente Library, die QR-Codes aus PHP heraus erzeugt.<\/p>\n<p>Hier und heute geht es um einen weiteren Vertreter dieser &#8222;Tut genau was sie soll&#8220; &#8211; Libraries: <a href=\"http:\/\/getid3.sourceforge.net\/\">getid3<\/a>. Letztens auf Arbeit sah ich mich mit dem Problem konfrontiert, Videoinformationen auf PHP-Seite auslesen zu m\u00fcssen und das m\u00f6glichst ohne Verrenkungen wie mit <a href=\"http:\/\/ffmpeg-php.sourceforge.net\/\">ffmpeg-php<\/a>.<\/p>\n<p>getid3 spuckt zu Videos die gew\u00fcnschten Informationen aus: Datenformat, Codec, Aufl\u00f6sung und Framerate. Dabei zu beachten ist, dass getid3 nur auf den id3-Tags arbeitet und nicht das Video selbst untersucht. Hei\u00dft: Um b\u00f6swillige, id3-Tag manipulierende Nutzer abzuhalten, ist getid3 ungeeignet und eine direkt auf dem Video operierende L\u00f6sung wie das oben genannte <i>ffmpeg-php<\/i> wird wieder interessanter.<\/p>\n<h2>Zur Verwendung<\/h2>\n<p>Kurz und schmerzlos wie es sein soll:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n&lt;?php\r\nrequire_once &quot;getid3\/getid3.php&quot;;\r\n\r\n$getID3 = new getID3;\r\n$file = $getID3-&gt;analyze(&quot;WMFRA41_1.m4v&quot;);\r\necho &quot;&lt;pre&gt;&quot; . print_r($file[&#039;video&#039;], true) . &quot;&lt;\/pre&gt;&quot;;\r\n\r\n\/*\r\nArray\r\n(\r\n    [dataformat] =&gt; quicktime\r\n    [resolution_x] =&gt; 1280\r\n    [resolution_y] =&gt; 720\r\n    [fourcc] =&gt; avc1\r\n    [frame_rate] =&gt; 600\r\n)\r\n*\/\r\n<\/pre>\n<p>L\u00e4sst man sich das komplette <i>$file<\/i> &#8211; Array ausgeben, zeigt sich getid3 von seiner gespr\u00e4chigen 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:<\/p>\n<h2>mp3-Handling<\/h2>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n&lt;?php\r\nrequire_once &quot;getid3\/getid3.php&quot;;\r\n\r\n$getID3 = new getID3;\r\n$file = $getID3-&gt;analyze(&quot;Ace of Base - The sign.mp3&quot;);\r\necho &quot;&lt;pre&gt;&quot; . print_r($file[&#039;audio&#039;], true) . &quot;&lt;\/pre&gt;&quot;;\r\n\r\n\/*\r\nArray\r\n(\r\n    [dataformat] =&gt; mp3\r\n    [channels] =&gt; 2\r\n    [sample_rate] =&gt; 44100\r\n    [bitrate] =&gt; 128000\r\n    [channelmode] =&gt; dual channel\r\n    [bitrate_mode] =&gt; cbr\r\n    [lossless] =&gt; \r\n    [encoder_options] =&gt; CBR128\r\n    [compression_ratio] =&gt; 0.090702947845805\r\n    [streams] =&gt; Array\r\n        (\r\n            [0] =&gt; Array\r\n                (\r\n                    [dataformat] =&gt; mp3\r\n                    [channels] =&gt; 2\r\n                    [sample_rate] =&gt; 44100\r\n                    [bitrate] =&gt; 128000\r\n                    [channelmode] =&gt; dual channel\r\n                    [bitrate_mode] =&gt; cbr\r\n                    [lossless] =&gt; \r\n                    [encoder_options] =&gt; CBR128\r\n                    [compression_ratio] =&gt; 0.090702947845805\r\n                )\r\n\r\n        )\r\n\r\n)\r\n*\/\r\n<\/pre>\n<h2>png-Handling (gek\u00fcrzte Form)<\/h2>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n&lt;?php\r\nrequire_once &quot;getid3\/getid3.php&quot;;\r\n\r\n$getID3 = new getID3;\r\n$file = $getID3-&gt;analyze(&quot;file.png&quot;);\r\necho &quot;&lt;pre&gt;&quot; . print_r($file[&#039;png&#039;], true) . &quot;&lt;\/pre&gt;&quot;;\r\n\r\n\/*\r\nArray\r\n(\r\n    [IHDR] =&gt; Array\r\n    (\r\n\t\t...\r\n\t\t\r\n\t\t[width] =&gt; 966\r\n\t\t[height] =&gt; 796\r\n\t\t[raw] =&gt; Array\r\n\t\t(\r\n\t\t\t[bit_depth] =&gt; 8\r\n\t\t\t[color_type] =&gt; 6\r\n\t\t\t[compression_method] =&gt; 0\r\n\t\t\t[filter_method] =&gt; 0\r\n\t\t\t[interlace_method] =&gt; 0\r\n\t\t)\r\n\r\n\t\t[compression_method_text] =&gt; deflate\/inflate\r\n\t\t[color_type] =&gt; Array\r\n\t\t(\r\n\t\t\t[palette] =&gt; \r\n\t\t\t[true_color] =&gt; 1\r\n\t\t\t[alpha] =&gt; 1\r\n\t\t)\r\n    )\r\n\t...\r\n*\/\r\n<\/pre>\n<p>Sollte man definitiv im Hinterkopf behalten, wenn sowas ben\u00f6tigt wird.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich bin ja extrem begeistert von Libraries, die ihren Zweck genau so erf\u00fcllen, wie man es als Anwender \/ Entwickler w\u00fcnscht. Die letzte Lobeshymne sang ich auf PHPQRCode, eine exzellente Library, die QR-Codes aus PHP heraus erzeugt. Hier und heute &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/videoinformationen-in-php-auslesen\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,8,3],"tags":[],"class_list":["post-682","post","type-post","status-publish","format-standard","hentry","category-php","category-quicktips","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/comments?post=682"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/682\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}