2010-10-26 4 views

ответ

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

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

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

+1

ariawan, большое вам спасибо за помощь. Я могу получить изображение в папке, но он пуст 0 байтов. это то, что у меня есть: – Ciprian

+1

Я не уверен, что произошло, но сервер, над которым я работал, был перезапущен, и теперь все работает отлично. Большое спасибо! – Ciprian

+0

хорошо .. большой ... – ariawan

2

Я использую 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() переменная времени $ для просмотра. убедитесь, что ffmpeg установлен на вашей машине. надеюсь, что это поможет.

+0

спасибо, что я попробую. Я знаю, что ffmpeg установлен. – Ciprian

+0

Я не уверен, как это сделать. Я создал переменную $ videoPath = 'skittles.flv'; и я назвал переменную $ time с print_r (time); Результатом будет Array() – Ciprian

+0

try ffmpeg -i /path/path/videofile.flv. он работает? – ariawan

7

Существует также расширение PHP FFMPEG, т.е. apt-get install php5-ffmpeg затем

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

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

+1

затем разделите на 60, чтобы получить минуты и по модулю 60, чтобы получить оставшиеся секунды –

+0

cool ... я также попробую эту опцию. Большое спасибо! – Ciprian

3

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

Он не только дает вам продолжительность видеоролика .flv за считанные секунды, но и преобразует его в формат minute:seconds. Вот пример кода с V 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']; 
+0

спасибо человеку. Я ценю вашу помощь. Но в итоге я использовал второе предложение. Любая идея о том, как захватить эскиз? – Ciprian

+0

+1 для getid3, потому что он не имеет зависимостей –

+0

@ciprian, как захватить миниатюру, должен быть отдельным вопросом. –

1

Спасибо за вашу помощь. Я также хотел бы создать эскиз из FLV-файла. В настоящее время я пытаюсь выполнить это, используя этот код. Но я, кажется, что-то делаю неправильно.

$cmd = "ffmpeg -i /home/web1/wpmu.site.com/htdocs/wp-content/blogs.dir/7/files/2010/10/4973_3.flv -f image2 -vframes 1 -ss 00:00:01 -y -s 100x100 /home/web1/wpmu.site.com/htdocs/wp-content/blogs.dir/7/files/2010/10/4973_3.png"; 

exec($cmd, $output, $return); 

Я включил его на страницу test.php. Он должен работать, просто обновляя страницу правильно? Я добавил путь к файлу png. Что может быть не так с этим?

Благодаря

+0

Я уже добавляю еще один ответ на ваш вопрос с эскизом. Я также добавил код, но параметр, который я использовал для ffmpeg, - jpeg. – ariawan