Ffmpeg ve PHP kullanarak bir görüntü oluşturmak için nasıl?

2 Cevap php

I this script kullanıyorum, ama ben görüntüsünü oluşturmak mümkün değilim.

Benim dosya here.

2 Cevap

Eğer $cmd yürütmek asla çünkü çalışmıyor. Aslında yürütmek için $cmd Eğer proc_open(), popen() kullanmanız gerekir, ya da exec().

Bu fonksiyonu deneyin. Bu sürece ffmpeg erişilebilir olduğu gibi bir görüntü oluşturmak gerekir. Erişilebilir $path linux içinde, Windows windows/system32 klasöre bırakın eklemek yapmak için. Veya Windows kontrol panelinde çevresel değişkenlere ekleyin.

/**
 * 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 - çıktılarının o CLI olduğu gibi aynı görüntüler. Bu ne yapıyor ffmpeg ayrıntılarını görmek için, ve bu çalışma değilse çöker nerede görmek için yararlıdır.

$errors - CLI bir hata kodu ile çıkar eğer bir hata görüntüler (IE, ffmpeg çöker) Will.

Sizin PHP program temelde /usr/bin/ffmpeg iki kez çağırır. İlk komut satırında böyle deneyin! You can

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

PHP komut tam olarak ne yaptığını öğrenmek, ve sonra komut satırında tam olarak o komutu deneyin.

Ilk komut gibi görünmelidir

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

Eğer echo s yer budur:

// 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`;