2009-08-10 2 views
3

Я использую this script, но я не могу создать изображение.Как создать изображение с помощью ffmpeg и PHP?

Мой файл here.

+0

Этот файл вы предоставляете практически бесполезным, так как он неразрывно связан с конкретной установки PHP. Как насчет того, какие ошибки или результаты вы видите вместо этого? – zombat

+0

никакое изображение не размножается через этот скрипт – webkul

ответ

8

Это не работает, потому что вы никогда не выполнится $cmd. Для фактического выполнения $cmd вам либо необходимо использовать popen(), proc_open(), или exec().

Попробуйте эту функцию. Он должен генерировать изображение, пока доступен ffmpeg. Чтобы сделать его доступным, добавьте его в $path в linux, поместите его в папку windows/system32 в Windows. Или добавьте его в переменные среды на панели управления в Windows.

 
/** 
* ExtractThumb, extracts a thumbnail from a video 
* 
* This function loads a video and extracts an image from a frame 4 
* seconds into the clip 
* @param $in string the input path to the video being processed 
* @param $out string the path where the output image is saved 
*/ 
function ExtractThumb($in, $out) 
{ 
    $thumb_stdout; 
    $errors; 
    $retval = 0; 

    // Delete the file if it already exists 
    if (file_exists($out)) { unlink($out); } 

    // Use ffmpeg to generate a thumbnail from the movie 
    $cmd = "ffmpeg -itsoffset -4 -i $in -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 $out 2>&1"; 
    exec($cmd, $thumb_stdout, $retval); 

    // Queue up the error for processing 
    if ($retval != 0) { $errors[] = "FFMPEG thumbnail generation failed"; } 

    if (!empty($thumb_stdout)) 
    { 
     foreach ($thumb_stdout as $line) 
     { 
      echo $line . "
\n"; } } if (!empty($errors)) { foreach ($errors as $error) { echo $error . "
\n"; } } }

$thumb_stdout - показывает результат такой же, как это было бы в CLI. Это полезно, чтобы просмотреть сведения о том, что делает ffmpeg, и посмотреть, где он сработает, если он не работает.

$errors - Будет отображаться сообщение об ошибке, если CLI выходит с кодом ошибки (IE, если ffmpeg падает).

+0

очень спасибо 2 u – webkul

+0

также может использовать 'system()', среди нескольких других опций – cregox

2

Ваша PHP-программа в основном вызывает /usr/bin/ffmpeg дважды. Попробуйте сначала в командной строке! Вы можете:

echo "<pre>$cmd</pre>" 

, чтобы узнать, что именно делает ваш PHP-скрипт, а затем попробовать эту точную команду в командной строке.

Первая команда должна выглядеть как

/usr/bin/ffmpeg -i /var/www/beta/clock.avi 2>&1 

Это где вы размещаете echo S:

// get the duration and a random place within that 
$cmd = "$ffmpeg -i $video 2>&1"; 
echo "<pre>$cmd</pre>" 

if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', `$cmd`, $time)) { 
    $total = ($time[2] * 3600) + ($time[3] * 60) + $time[4]; 
    $second = rand(1, ($total - 1)); 
} 

// get the screenshot 
$cmd = "$ffmpeg -i $video -an -ss $second -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg $image 2>&1"; 
echo "<pre>$cmd</pre>" 
$return = `$cmd`; 
0

Сначала установите FFmpeg-PHP (http://ffmpeg-php.sourceforge.net/)

И тогда вы можете использовать этот простой код:

<?php 
$frame = 10; 
$movie = 'test.mp4'; 
$thumbnail = 'thumbnail.png'; 

$mov = new ffmpeg_movie($movie); 
$frame = $mov->getFrame($frame); 
if ($frame) { 
    $gd_image = $frame->toGDImage(); 
    if ($gd_image) { 
     imagepng($gd_image, $thumbnail); 
     imagedestroy($gd_image); 
     echo '<img src="'.$thumbnail.'">'; 
    } 
} 
?>