2011-01-31 20 views

Respuesta

55

getID3 admite formatos de video. Ver: http://getid3.sourceforge.net/

Editar: Así, en formato de código, que sería como:

include_once('pathto/getid3.php'); 
$getID3 = new getID3; 
$file = $getID3->analyze($filename); 
echo("Duration: ".$file['playtime_string']. 
"/Dimensions: ".$file['video']['resolution_x']." wide by ".$file['video']['resolution_y']." tall". 
"/Filesize: ".$file['filesize']." bytes<br />"); 

Nota: Debe incluir las clases getid3 antes de que esto va a funcionar! Ver el enlace de arriba.

Editar: Si tiene la capacidad de modificar la instalación de PHP en su servidor, una extensión de PHP para este propósito es ffmpeg-php. Ve: http://ffmpeg-php.sourceforge.net/

+0

Hola, gracias, pero esto funciona bien para el archivo de audio pero no funciona correctamente en los archivos de video como mp4, wmv, etc. ... Por favor, háganme saber cualquier otra solución aparte de esto. – Chandan

+1

Use una biblioteca diferente, entonces, o una extensión PHP como ffmpeg-php (http://ffmpeg-php.sourceforge.net/) – aendrew

+0

¿cuál es el problema con getID3 y ffmpeg? por qué no están haciendo la interfaz de usuario adecuada para que la lectura sea muy fácil de usar ... se desvaneció al mirar la página de inicio de getID3 solamente ... –

15

Si ha FFMPEG instalada en el servidor (http://www.mysql-apache-php.com/ffmpeg-install.htm), es posible obtener los atributos de su vídeo usando el comando "-vstats" y analizar el resultado con un poco de expresiones regulares - como se muestra en la ejemplo a continuación. Entonces, necesitas el funtion PHP filesize() para obtener el tamaño.

$ffmpeg_path = 'ffmpeg'; //or: /usr/bin/ffmpeg , or /usr/local/bin/ffmpeg - depends on your installation (type which ffmpeg into a console to find the install path) 
$vid = 'PATH/TO/VIDEO'; //Replace here! 

if (file_exists($vid)) { 

    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime_type = finfo_file($finfo, $vid); // check mime type 
    finfo_close($finfo); 

    if (preg_match('/video\/*/', $mime_type)) { 

     $video_attributes = _get_video_attributes($vid, $ffmpeg_path); 

     print_r('Codec: ' . $video_attributes['codec'] . '<br/>'); 

     print_r('Dimension: ' . $video_attributes['width'] . ' x ' . $video_attributes['height'] . ' <br/>'); 

     print_r('Duration: ' . $video_attributes['hours'] . ':' . $video_attributes['mins'] . ':' 
       . $video_attributes['secs'] . '.' . $video_attributes['ms'] . '<br/>'); 

     print_r('Size: ' . _human_filesize(filesize($vid))); 

    } else { 
     print_r('File is not a video.'); 
    } 
} else { 
    print_r('File does not exist.'); 
} 

function _get_video_attributes($video, $ffmpeg) { 

    $command = $ffmpeg . ' -i ' . $video . ' -vstats 2>&1'; 
    $output = shell_exec($command); 

    $regex_sizes = "/Video: ([^,]*), ([^,]*), ([0-9]{1,4})x([0-9]{1,4})/"; // or : $regex_sizes = "/Video: ([^\r\n]*), ([^,]*), ([0-9]{1,4})x([0-9]{1,4})/"; (code from @1owk3y) 
    if (preg_match($regex_sizes, $output, $regs)) { 
     $codec = $regs [1] ? $regs [1] : null; 
     $width = $regs [3] ? $regs [3] : null; 
     $height = $regs [4] ? $regs [4] : null; 
    } 

    $regex_duration = "/Duration: ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}).([0-9]{1,2})/"; 
    if (preg_match($regex_duration, $output, $regs)) { 
     $hours = $regs [1] ? $regs [1] : null; 
     $mins = $regs [2] ? $regs [2] : null; 
     $secs = $regs [3] ? $regs [3] : null; 
     $ms = $regs [4] ? $regs [4] : null; 
    } 

    return array('codec' => $codec, 
     'width' => $width, 
     'height' => $height, 
     'hours' => $hours, 
     'mins' => $mins, 
     'secs' => $secs, 
     'ms' => $ms 
    ); 
} 

function _human_filesize($bytes, $decimals = 2) { 
    $sz = 'BKMGTP'; 
    $factor = floor((strlen($bytes) - 1)/3); 
    return sprintf("%.{$decimals}f", $bytes/pow(1024, $factor)) . @$sz[$factor]; 
} 
+1

¡Muchas gracias por esto! Descubrí que la expresión regular proporcionada se quedó corta porque mis videos de prueba tenían una coma adicional en la sección del códec. Dicho esto, aquí hay una solución para cualquiera con el mismo problema: '$ regex_sizes ="/Video: ([^ \ r \ n] *), ([^,] *), ([0-9] {1,4 }) x ([0-9] {1,4})/";' también, mi ruta ffmpeg era: '/ usr/local/bin/ffmpeg' (escribe' which ffmpeg' en una consola para encontrar la ruta de instalación) Aquí hay una muestra de Regexr: http://regexr.com/3fs8d – 1owk3y

+0

¡Gracias! Actualicé mi respuesta en consecuencia. – F3L1X79

4

Si utiliza Wordpress que sólo puede utilizar el wordpress construyen en función con el identificador de vídeo proporcionan wp_get_attachment_metadata($videoID):

wp_get_attachment_metadata($videoID); 

me ha ayudado mucho. es por eso que he publicado, aunque la pregunta fue hecha en 2011.

0

https://github.com/JamesHeinrich/getID3 descarga getid3 cremallera y que sólo se getid3 llamado copiar y pegar la carpeta en la carpeta de proyecto y usarlo como a continuación muestran ...

<?php 
     require_once('/fire/scripts/lib/getid3/getid3/getid3.php'); 
     $getID3 = new getID3(); 
     $filename="/fire/My Documents/video/ferrari1.mpg"; 
     $fileinfo = $getID3->analyze($filename); 

     $width=$fileinfo['video']['resolution_x']; 
     $height=$fileinfo['video']['resolution_y']; 

     echo $fileinfo['video']['resolution_x']. 'x'. $fileinfo['video']['resolution_y']; 
     echo '<pre>';print_r($fileinfo);echo '</pre>'; 
?> 
Cuestiones relacionadas