Получение продолжительности FLV с помощью php

У меня есть файл FLV, загруженный на сервер. Я хотел бы отображать его продолжительность в следующем формате «минуты: секунды». Может ли кто-нибудь помочь мне с этим?

Спасибо


person Ciprian    schedule 26.10.2010    source источник


Ответы (4)


Вот мой код для захвата кадра и создания изображения из видео...

// get the duration and a random place within that
$cmd = "ffmpeg -i " . $videoPath . " 2>&1";
if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', `$cmd`, $time)) {
   $total = ($time[2] * 3600) + ($time[3] * 60) + $time[4];
   $second = rand(1, ($total - 1));
}
exec($cmd);

// get the screenshot
exec("ffmpeg -i " . $videoPath . " -deinterlace -an -ss $second -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg " . $imageOutput . " 2>&1");

Переменная $second представляет собой случайное число от 0 до общей продолжительности. а второй exec() должен создать файл изображения из выбранного кадра.

$imageOutput — это абсолютный путь к сгенерированному изображению. например: /home/ariawan/image-generated.jpg

person ariawan    schedule 27.10.2010
comment
ariawan, большое спасибо за помощь. Я могу получить изображение в папке, но оно пустое 0 байт. это то, что у меня есть: - person Ciprian; 27.10.2010
comment
Я не уверен, что произошло, но сервер, на котором я работал, был перезапущен, и теперь все работает нормально. Большое спасибо! - person Ciprian; 28.10.2010

Существует также расширение FFMPEG для PHP, т.е. apt-get install php5-ffmpeg тогда

$movie = new ffmepg_movie("path/to/movie.flv");
$duration_in_seconds = $movie->getDuration();

Это работало для меня раньше. Расширение хорошо подходит для извлечения метаданных и проверки того, является ли загруженный файл FLV и т. д.

person David Norris    schedule 26.10.2010
comment
затем разделите на 60, чтобы получить минуты, и по модулю 60, чтобы получить оставшиеся секунды. - person David Norris; 26.10.2010

Я бы использовал getID3 PHP library, написанный на простом старом PHP без каких-либо зависимостей.

Он не только дает вам продолжительность фильма .flv в секундах, но уже преобразует его в формат minute:seconds. Вот пример кода для версии 1.7.9 (последняя стабильная версия getid3):

<?php

// getId3 library uses deprecated eregi_* functions 
// which generate errors under PHP 5.3 - so I excluded them
error_reporting(E_ALL ^ E_DEPRECATED);

// just for debugging/sample
header('Content-Type: text/plain');

// include the getid3 base class in order to use the lib
require_once('./lib/getid3.php');

// path to your .flv file
$filename = './sample.flv';

$getID3 = new getID3();
$fileInfo = $getID3->analyze($filename);

// echoes something like 127.8743
print 'Playtime in seconds: ' . $fileInfo['playtime_seconds']; 

print chr(10);

// echoes something like: 2:07
print 'Playtime in minute:seconds format: ' . $fileInfo['playtime_string'];
person Max    schedule 26.10.2010
comment
Спасибо чувак. Я ценю вашу помощь. Но в итоге я воспользовался вторым предложением. Любая идея о том, как захватить миниатюру? - person Ciprian; 27.10.2010
comment
@ciprian, как получить миниатюру, должен быть отдельным вопросом. - person Pekka; 27.10.2010
comment
@Pekka Хорошо ... извините, я просто подумал, что эта информация должна быть на том же месте. - person Ciprian; 27.10.2010

я использую php и ffmpeg, чтобы получить продолжительность видео.

    $cmd = "ffmpeg -i " . $videoPath . " 2>&1";
    if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', `$cmd`, $time)) {
        $total = ($time[2] * 3600) + ($time[3] * 60) + $time[4];
    }
    exec($cmd);

print_r() переменная $time для просмотра. убедитесь, что на вашем компьютере установлен ffmpeg. Надеюсь, это поможет.

person ariawan    schedule 26.10.2010
comment
Я не знаю, как это сделать. Я создал переменную $videoPath = 'skittles.flv'; и я вызвал переменную $time с помощью print_r (время); Результат - массив() - person Ciprian; 26.10.2010
comment
попробуйте ffmpeg -i /path/path/videofile.flv. он работает? - person ariawan; 26.10.2010
comment
нет... файл находится в том же каталоге, что и файл php. Я создал файл шаблона wordpress. Это имеет значение? Это путь, который я использовал $cmd = ffmpeg -i /wp-tube/wptube/skittles.flv. $видеоПуть . 2&1; - person Ciprian; 26.10.2010
comment
если ffmpeg запущен. код должен возвращать продолжительность. где находится ваш ffmpeg? если он установлен в /usr/bin/ffmpeg, то $cmd должен быть таким. $cmd =/user/bin/ffmpeg -i /wp-tube/wptube/skittles.flv - person ariawan; 26.10.2010
comment
$cmd = /usr/local/bin/ffmpeg -i /wp-tube/wptube/skittles.flv . $видеоПуть . 2&1; это то, что у меня есть. Почему-то до сих пор не работает. - person Ciprian; 26.10.2010
comment
Я заставил его работать. Большое спасибо! Я получаю продолжительность с помощью print_r ($time[0]); Продолжительность в этом формате 00:00:45. Как мне получить только минуты и секунды? 00:45 - person Ciprian; 26.10.2010
comment
ура! круто .. ;) вы можете использовать substr() чтобы получить только 00:45 .. или $str = взорвать() с разделителем ':' и отобразить только $str[1] и $str[2] - person ariawan; 26.10.2010
comment
В конце концов это сработало. У меня была небольшая проблема с моим sql-запросом. Большое тебе спасибо. - person Ciprian; 27.10.2010