Voglio sapere come ottenere la durata, dimensione e dimensione del file video caricato in PHP. Il file può essere in qualsiasi formato video.Come ottenere durata, dimensioni e dimensioni del video in PHP?
risposta
getID3 supporta i formati video. Vedere: http://getid3.sourceforge.net/
Edit: Quindi, in formato di codice, che sarebbe come:
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: È necessario includere le classi getID3 prima che questo funzionerà! Vedi il link sopra.
Modifica: se si ha la possibilità di modificare l'installazione di PHP sul server, un'estensione PHP per questo scopo è ffmpeg-php. Vedere: http://ffmpeg-php.sourceforge.net/
Se avete FFMPEG installato sul vostro server (http://www.mysql-apache-php.com/ffmpeg-install.htm), è possibile ottenere gli attributi del vostro video utilizzando il comando "-vstats" e l'analisi del risultato con qualche regex - come indicato nella esempio sotto. Quindi, è necessario il PHP function filesize() per ottenere la dimensione.
$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];
}
Grazie mille per questo! Ho scoperto che la regex fornita era insufficiente perché i miei video di prova avevano una virgola extra nella sezione codec. Detto questo, ecco una soluzione per chiunque abbia lo stesso problema: '$ regex_sizes ="/Video: ([^ \ r \ n] *), ([^,] *), ([0-9] {1,4 }) x ([0-9] {1,4})/";' anche, il mio percorso ffmpeg era: '/ usr/local/bin/ffmpeg' (scrivi' quale ffmpeg' in una console per trovare il percorso di installazione). Ecco un esempio Regexr: http://regexr.com/3fs8d – 1owk3y
Grazie! Ho aggiornato la mia risposta di conseguenza. – F3L1X79
Se si utilizza Wordpress si può semplicemente utilizzare il wordpress costruire in funzione con l'ID del Video fornito wp_get_attachment_metadata($videoID):
wp_get_attachment_metadata($videoID);
mi ha aiutato molto. ecco perché sto postando esso, anche se la domanda è stata posta nel 2011.
https://github.com/JamesHeinrich/getID3 scaricare getID3 zip e di cartella di copia incolla solo getID3 chiamato in cartella del progetto e usarlo come sotto esposizione ...
<?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>';
?>
Ciao a presto, Grazie, ma questo funziona bene per il file audio ma non funziona correttamente sui file video come mp4, wmv ecc ... Per favore fatemi sapere qualsiasi altra soluzione a parte questo. – Chandan
Utilizzare una libreria diversa, quindi, o un'estensione PHP come ffmpeg-php (http://ffmpeg-php.sourceforge.net/) – aendrew
qual è il problema con getID3 e ffmpeg ?? perché non stanno rendendo l'interfaccia utente corretta in modo che la lettura che diventa molto facile da usare ... si stia dissolvendo guardando solo la pagina iniziale di getID3 ... –