如何使用ffmpeg和PHP创建图像?

时间:2009-08-10 07:47:30

标签: php image video ffmpeg

我正在使用this script,但我无法创建图片。

我的档案是here

3 个答案:

答案 0 :(得分:8)

它无效,因为您永远不会执行$cmd。要实际执行$cmd,您需要使用popen()proc_open()exec()

试试这个功能。只要ffmpeg可访问,它就应该生成一个图像。要使其可访问,请将其添加到linux中的$path,将其放入Windows中的windows/system32文件夹中。或者将其添加到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正在执行的操作的详细信息,以及查看ffmpeg无法正常工作时的崩溃位置。

$errors - 如果CLI退出并显示错误代码(IE,如果ffmpeg崩溃),则会显示错误。

答案 1 :(得分: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`;

答案 2 :(得分: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.'">';
    }
}
?>