Ich möchte den header einer .avi-Datei auslesen, um herauszufinden, wie lang der Film ist. Ich habe Schwieirgkeiten, an die gewünschten Header-Informationen zu kommen.
DarkMight0 hat mal so etwas für MP3s gebaut, und sein Skript habe ich versucht für avis umzustricken. Wie der .avi-header aufgebaut ist, meine ich auf http://www.fastgraph.com/help/avi_header_format.html und http://msdn.microsoft.com/archive/de...rstructure.asp herausgefunden zu haben (auch wenn ich die Angaben etwas widersprüchlich finde, aber das ist im Moment noch nicht mal relevant).
Mein Code liefert mir aber Resultate, die keinen Sinn machen. Entdeckt jemand, wo der Fehler liegt?
Das Skript gibt mir eine Liste der extrahierten Binärdaten mit Dezimalübersetzung aus. Einige der Werte sind aber Null, andere unrealistisch:
Die Angabe in der dritten Zeile sollte laut der Microsoft-Seite (Link s.o.) dwMicroSecPerFrame sein, also die Anzeigedauer eines Frames. Mein Skript gibt aber eine Null aus. Das nur als Beispiel, warum das irgendwie nicht stimmen kann.
Irgendwelche Lösungsansätze?
DarkMight0 hat mal so etwas für MP3s gebaut, und sein Skript habe ich versucht für avis umzustricken. Wie der .avi-header aufgebaut ist, meine ich auf http://www.fastgraph.com/help/avi_header_format.html und http://msdn.microsoft.com/archive/de...rstructure.asp herausgefunden zu haben (auch wenn ich die Angaben etwas widersprüchlich finde, aber das ist im Moment noch nicht mal relevant).
Mein Code liefert mir aber Resultate, die keinen Sinn machen. Entdeckt jemand, wo der Fehler liegt?
PHP-Code:
<?php
$binaer = '';
echo $filename."<br>\n";
$file_handle = fopen ($dir.$filename, 'rb');
if (!$file_handle)
{
echo "Datei konnte nicht geöffnet werden.<br>\n";
continue;
}
for ($bytenr = 0; $bytenr < 88; $bytenr++)
{
$header = fread ($file_handle, 1);
$byte = decbin(ord($header));
$byte = str_pad ($byte,8,"0",STR_PAD_LEFT);
$binaer = sprintf ("%s%s", $binaer,$byte);
}
// Die einzelnen Werte extrahieren und in Dezimal-Werte umwandeln
$binaerer_header = substr($binaer,(32*8));
$binaerer_header = chunk_split($binaerer_header, (4*8), "-");
$binaerer_header_array = explode("-", $binaerer_header);
foreach ($binaerer_header_array as $vier_bytes) {
$dezimaler_header_array[] = bindec($vier_bytes);
echo "dezimal: ".bindec($vier_bytes).", binär: ".$vier_bytes."<br>";
}
?>
dezimal: 1468137472, binär: 01010111100000100000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 268500992, binär: 00010000000000010000000000000000
dezimal: 659292928, binär: 00100111010011000000001100000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 33554432, binär: 00000010000000000000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 3758161920, binär: 11100000000000010000000000000000
dezimal: 402718720, binär: 00011000000000010000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 0, binär:
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 268500992, binär: 00010000000000010000000000000000
dezimal: 659292928, binär: 00100111010011000000001100000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 33554432, binär: 00000010000000000000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 3758161920, binär: 11100000000000010000000000000000
dezimal: 402718720, binär: 00011000000000010000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 0, binär: 00000000000000000000000000000000
dezimal: 0, binär:
Irgendwelche Lösungsansätze?
Kommentar