Sortir le format, durée etc d'une vidéo avec php ?

WRInaute passionné
Bonjour,

Comment sortir le format, la durée, et toutes les informations d'une vidéo avec php ?

Merci
 
WRInaute passionné
J'ai trouvé ça mais je n'arrive pas à m'en servir... une idée ?

Code:
define(GUID_ASF_HEADER,
" \x30\x26\xb2\x75\x8e\x66\xcf\x11\xa6\xd9
\x00\xaa\x00\x62\xce\x6c");
define(GUID_ASF_META_INFO,
" \x40\xa4\xd0\xd2\x07\xe3\xd2\x11\x97\xf0
\x00\xa0\xc9\x5e\xa8\x50");
define(GUID_ASF_FILE_PROPERTIES,
" \xa1\xdc\xab\x8c\x47\xa9\xcf\x11\x8e\xe4
\x00\xc0\x0c\x20\x53\x65");
define(GUID_ASF_STREAM,
" \x91\x07\xdc\xb7\xb7\xa9\xcf\x11\x8e\xe6
\x00\xc0\x0c\x20\x53\x65");
define(GUID_ASF_AUDIO_STREAM,
" \x40\x9e\x69\xf8\x4d\x5b\xcf\x11\xa8\xfd
\x00\x80\x5f\x5c\x44\x2b");
define(GUID_ASF_VIDEO_STREAM,
" \xc0\xef\x19\xbc\x4d\x5b\xcf\x11\xa8\xfd
\x00\x80\x5f\x5c\x44\x2b");


// PHP can't handle unsigned 32 bit integers
// this function forces any overflowed ulong into floats
function uint32($n) {
if($n < 0) { // signed
$n += 4294967296;
}
return $n;
}

function read_asf_int64($file) {
$data = fread($file, 8);
$v = unpack("V2name", $data);
$int64 = uint32($v['name2']) * 4294967296 + uint32($v['name1']);
return $int64;
}

function read_asf_long($file) {
$data = fread($file, 4);
$v = unpack("Vname", $data);
return uint32($v['name']);
}

function read_asf_short($file) {
$data = fread($file, 2);
$v = unpack("vname", $data);
return $v['name'];
}

function read_asf_str($file) {
$data = fread($file, 2);
$v = unpack("vname", $data);
$len = $v['name'];
$data = fread($file, $len);
// convert UCS-16 to UTF-8 by dropping second byte
$s = '';
for($i = 0; $i < $len; $i += 2) {
$s .= $data{$i};
}
return $s;
}

function read_asf_guid($file) {
$guid = fread($file, 16);
return $guid;
}

function analyse_asf_file($file_name) {
$props = array();
$file = fopen($file_name, "rb");
$guid = read_asf_guid($file);
if($guid == GUID_ASF_HEADER) {
$offset = 30;
$chuck_length = read_asf_int64($file);
$num_chunks = read_asf_long($file);
$unknown = read_asf_short($file);
for($i = 0; $i < $num_chunks; $i++) {
fseek($file, $offset);
$guid = read_asf_guid($file);
$chuck_length = read_asf_int64($file);
read_asf_header_chunk($file, $guid, &$props);
$offset += $chuck_length;
}
}
fclose($file);
return $props;
}

function read_asf_header_chunk($file, $guid, &$props) {
switch($guid) {
case GUID_ASF_FILE_PROPERTIES:
read_asf_file_properties($file, $props);
break;
case GUID_ASF_META_INFO:
read_asf_meta_info($file, $props);
break;
case GUID_ASF_STREAM:
read_stream_obj($file, $props);
break;
}
}

function read_asf_file_properties($file, &$props) {
$props['client_guid'] = read_asf_guid($file);
$props['file_size'] = read_asf_int64($file);
$props['file_creation_time'] = read_asf_int64($file);
$props['number_of_packets'] = read_asf_int64($file);
$props['end_position'] = read_asf_int64($file);
$props['duration'] = read_asf_int64($file);
$props['start_position'] = read_asf_int64($file);
$props['flags'] = read_asf_long($file);
$props['minimum_pack_size'] = read_asf_long($file);
$props['maximum_pack_size'] = read_asf_long($file);
}

function read_asf_meta_info($file, &$props) {
$num_of_pairs = read_asf_short($file);
for($i = 0; $i < $num_of_pairs; $i++) {
$name = read_asf_str($file);
$spacer = read_asf_short($file);
$value = read_asf_str($file);
$props[$name] = $value;
}
}

function read_stream_obj($file, &$props) {
$stream_type = read_asf_guid($file);
$audio_error_concealment = read_asf_guid($file);
$unknown = read_asf_int64($file);
$type_specific_data_len = read_asf_long($file);
$stream_specific_data_len = read_asf_long($file);
$stream_num = read_asf_short($file);
$unknown = read_asf_long($file);
if($stream_type == GUID_ASF_AUDIO_STREAM) {
$props['format_tag'] = read_asf_short($file);
$props['channels'] = read_asf_short($file);
$props['sample_per_sec'] = read_asf_long($file);
$props['avg_bytes_per_sec'] = read_asf_long($file);
$props['block_align'] = read_asf_short($file);
$props['bits_per_sample'] = read_asf_short($file);
}
else if($stream_type == GUID_ASF_VIDEO_STREAM) {
$props['picture_width'] = read_asf_long($file);
$props['picture_height'] = read_asf_long($file);
$unknown = fread($file, 1);
$bitmapinfoheader_size = read_asf_short($file);
$bitmapinfoheader_size = read_asf_long($file);
$props['bitmap_width'] = read_asf_long($file);
$props['bitmap_height'] = read_asf_long($file);
$props['bitmap_planes'] = read_asf_short($file);
$props['bitmap_bitcount'] = read_asf_short($file);
$props['bitmap_compression'] = read_asf_long($file);
$props['bitmap_sizeimage'] = read_asf_long($file);
$props['bitmap_xpelspermeter'] = read_asf_long($file);
$props['bitmap_ypelspermeter'] = read_asf_long($file);
$props['bitmap_colorused'] = read_asf_long($file);
$props['bitmap_colorimportant'] = read_asf_long($file);
}
}

$props = analyse_asf_file("video3.wmv");
foreach($props as $name => $value) {
echo "$name = $value<br>";
}

print_r($props);
 
WRInaute passionné
Bon déjà pour des fichiers wmv au niveau de la premiere fonction

$guid = read_asf_guid($file);
if($guid == GUID_ASF_HEADER) {

le GUID n'est pas valable, pas de correspondance. ce la doit sans doute marcher uniquement avec des fichiers ASF

donc pas assez d interet il fodrait toutes les videos.
 
Discussions similaires
Haut