Как получить продолжительность, размер и размер видео в PHP?

Я хочу знать, как получить продолжительность, размер и размер загруженного видеофайла в PHP. Файл может быть в любом видеоформате.


person Chandan    schedule 31.01.2011    source источник


Ответы (4)


getID3 поддерживает форматы видео. См .: http://getid3.sourceforge.net/

Изменить: Итак, в формате кода это будет примерно так:

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 />");

Примечание. Вы должны включить классы getID3, прежде чем это будет работать! См. Ссылку выше.

Изменить: если у вас есть возможность изменить установку PHP на вашем сервере, расширение PHP для этой цели - ffmpeg-php. См .: http://ffmpeg-php.sourceforge.net/

person aendrew    schedule 31.01.2011
comment
Привет, Эндрю! Спасибо, но это хорошо работает для аудиофайла, но не работает правильно с видеофайлами, такими как mp4, wmv и т. Д. Пожалуйста, дайте мне знать о любом другом решении, кроме этого. - person Chandan; 11.02.2011
comment
Тогда используйте другую библиотеку или расширение PHP, например ffmpeg-php (ffmpeg-php.sourceforge.net ) - person aendrew; 11.02.2011
comment
в чем проблема с getID3 и ffmpeg ?? почему они не делают интерфейс должным образом, так что чтение, которое стало очень удобным для пользователя ... исчезло при просмотре только домашней страницы getID3 ... - person Shyam; 26.06.2014
comment
@GhanshyamDobariya Разные инструменты полезны для разных целей. getID3 был бы для меня значительно менее полезным, если бы у него был пользовательский интерфейс. - person aendrew; 28.06.2014
comment
Я проверил это с файлом FLV с разрешением 480 и $file['video']['resolution_x'] дал мне int(16). Мне удалось получить правильную ширину видео с помощью $width=$file['flv']['meta']['onMetaData']['width']; - person kmoney12; 29.05.2015
comment
Если вы используете composer: {"require":{"james-heinrich/getid3": ">=1.9.9"}}, запустите php composer.phar update. - person John Erck; 11.06.2015
comment
Этот мне очень помог: D - person FosAvance; 29.07.2017
comment
Хорошо работал с MOV, FLV и MP4, спасибо. - person Manish gour; 28.04.2021

Если на вашем сервере установлен FFMPEG (http://www.mysql-apache-php.com/ffmpeg-install.htm), можно получить атрибуты вашего видео с помощью команды «-vstats» и проанализировать результат с помощью некоторого регулярного выражения, как показано на пример ниже. Затем, чтобы получить размер, вам понадобится функция PHP Size ().

$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];
}
person F3L1X79    schedule 09.09.2014
comment
Большое спасибо за это! Я обнаружил, что предоставленное регулярное выражение не работает, потому что в моих тестовых видеороликах в разделе кодеков была дополнительная запятая. Тем не менее, вот исправление для тех, у кого такая же проблема: $regex_sizes = "/Video: ([^\r\n]*), ([^,]*), ([0-9]{1,4})x([0-9]{1,4})/"; также, мой путь к ffmpeg был: /usr/local/bin/ffmpeg (введите which ffmpeg в консоль, чтобы найти путь для установки). Вот пример Regexr: regexr.com/3fs8d - person 1owk3y; 02.05.2017
comment
Лучший. Большое спасибо - person Fokrule; 21.01.2019

Если вы используете Wordpress, вы можете просто использовать встроенную функцию wordpress с предоставленным идентификатором видео wp_get_attachment_metadata ($ videoID):

wp_get_attachment_metadata($videoID);

мне очень помогли. вот почему я публикую его, хотя он предназначен только для пользователей wordpress.

person Timotheus0106    schedule 22.03.2017

https://github.com/JamesHeinrich/getID3 скачать zip-архив getid3, а затем скопировать только папку с именем getid3 в папке проекта и используйте его, как показано ниже ...

<?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>';
?>
person Manthan Patel    schedule 17.11.2017