Как создать изображение, используя ffmpeg и PHP? - PullRequest
3 голосов
/ 10 августа 2009

Я использую этот скрипт , но я не могу создать изображение.

Мой файл здесь .

Ответы [ 3 ]

8 голосов
/ 14 августа 2009

Это не работает, потому что вы никогда не выполняете $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 . "<br />\n";
        }
    }

    if (!empty($errors))
    {
        foreach ($errors as $error)
        {
            echo $error . "<br />\n";
        }
    }
}

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

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

2 голосов
/ 10 августа 2009

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

<code>echo "<pre>$cmd
»

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

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

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

Здесь вы размещаете echo s:

<code>// get the duration and a random place within that
$cmd = "$ffmpeg -i $video 2>&1";
echo "<pre>$cmd
» if (preg_match ('/ Duration: ((\ d +): (\ d +): (\ d +)) / s', `$ cmd`, $ time)) { $ total = ($ time [2] * 3600) + ($ time [3] * 60) + $ time [4]; $ second = rand (1, ($ total - 1)); } // получить скриншот $ cmd = "$ ffmpeg -i $ video -an -ss $ second -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg $ image 2> & 1"; echo "
$cmd
" $ return = `$ cmd`;
0 голосов
/ 19 декабря 2014

Первая установка 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.'">';
    }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...