Это не работает, потому что вы никогда не выполняете $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 падает).