2

我将 ffmpeg 和 ffmpeg-php 安装到我的专用服务器上,并使用一个小脚本尝试从特定秒中提取图像。

<?php

$extension = "ffmpeg";
$extension_soname = $extension . "." . PHP_SHLIB_SUFFIX;
$extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;

$timeOffset = "00:00:30";
$videoPath = "sample.mp4";
$extensi = ".jpg";
$folder = "images/";
$finalfilename = $folder . $randomfilename . $extensi;

echo $extension_fullname; //I AM GETING THIS /usr/lib64/php/modules/ffmpeg.so

if (exec("ffmpeg -ss $timeOffset -i $videoPath  -frames:v 1 $finalfilename")){
echo "Done";
}else{
echo "Error";   
}
?>

正如您在我的执行命令中看到的那样,有 ffmpeg,但我怎样才能找到 ffmpeg 的绝对路径?看看我的截图,也许这可以帮助你告诉我..

我的最后一个问题是什么是ffmpeg-php?我需要吗?我已经安装了。

谢谢

在此处输入图像描述

4

1 回答 1

3

如果您使用的是ffmpeg可执行文件,则不需要ffmpeg-php. 您可能只想使用ffmpeg可执行文件,因为与ffprobe可执行文件一起您可以做任何事情。

我没有明白你$extension*的变量的意义。要知道ffmpeg安装您的绝对路径,您可以使用该which程序:which ffmpeg.

您的exec()呼叫检查是错误的,我建议您这样使用它:

exec("ffmpeg -v error -y -ss $timeOffset -i $videoPath -vframes 1 $finalfilename 2>&1 >/dev/null", $stderr, $exit_status);

if ($exit_status === 0) {
    print 'Done! :)';
} else {
    print 'Error... :/';
    // implode("\n", $stderr) will help you figure out what happened...
}

我添加-v error了只允许ffmpeg输出错误消息并-y避免$finalfilename文件存在问题。我也抑制了所有STDOUT,只将STDERR输出移动到$stderr变量。如果您的exec()呼叫由于某种原因失败($exit_status将非 0),您将了解该$stderr阵列上发生的情况。

如果我遗漏了什么,请告诉我!

于 2013-11-10T12:11:55.633 回答