Я использую this script, но я не могу создать изображение.Как создать изображение с помощью ffmpeg и PHP?
Мой файл here.
Я использую this script, но я не могу создать изображение.Как создать изображение с помощью ffmpeg и PHP?
Мой файл here.
Это не работает, потому что вы никогда не выполнится $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 падает).
Ваша 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`;
Сначала установите 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.'">';
}
}
?>
Этот файл вы предоставляете практически бесполезным, так как он неразрывно связан с конкретной установки PHP. Как насчет того, какие ошибки или результаты вы видите вместо этого? – zombat
никакое изображение не размножается через этот скрипт – webkul