Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php exec ffmpeg失败,可能的原因或解决方案?_Php_Ffmpeg - Fatal编程技术网

Php exec ffmpeg失败,可能的原因或解决方案?

Php exec ffmpeg失败,可能的原因或解决方案?,php,ffmpeg,Php,Ffmpeg,我的代码失败了: $newName = $_SERVER['REMOTE_ADDR'].'_'.time(); $fileName=$newName.$extension; $flvName=$newName.'.flv'; $ffmpegPath = "/usr/bin/ffmpeg"; $destination_file = $this->folder.basename($fileName); $destination_movie = $this->folder.'origina

我的代码失败了:

$newName = $_SERVER['REMOTE_ADDR'].'_'.time();
$fileName=$newName.$extension;
$flvName=$newName.'.flv';
$ffmpegPath = "/usr/bin/ffmpeg";
$destination_file = $this->folder.basename($fileName);
$destination_movie = $this->folder.'original/'.basename($fileName);
$destination_flv = $this->folder.'flv/'.basename($flvName);
$destination_image = $doc_upload.'thumb/'.$newName.'.jpg';
$ffmpegDo = $ffmpegPath." -i ".$destination_movie." -ar 22050 -ab 128 -b 3600 -f flv -s 320x240 ".$destination_flv;
if (!exec($ffmpegDo)) { $error[] = ERROR_EXEC_FFMPEGDO.':'.$ffmpegDo; }
你知道为什么会失败吗? 谢谢各位

编辑:未生成任何错误文件

$ffmpegDo如下所示:

/usr/local/bin/ffmpeg -i /home/myaccount/public_html/upload/videos/original/86.69.191.177_1305714026.mpeg -ar 22050 -ab 128 -b 3600 -f flv -s 320x240 /home/myaccount/public_html/upload/videos/flv/86.69.191.177_1305714026.flv
使用下面答案中描述的方法,我得到了这个错误:

[0]=>sh:/usr/local/bin/ffmpeg:没有这样的文件或目录

这很奇怪,因为我的服务器人员指定这是我的ffmpeg位置。现在怎么办?

另请参见。在您的情况下,您可以使用以下方法获得特定的错误消息,但也可以获得一般的
$result
errorlevel:

exec("$ffmpegDo 2>&1", $output, $result);
if ($result != 0) {
    $error[] = ERROR_EXEC_FFMPEGDO.':'.$ffmpegDo; 
}
用于指定结果变量的第三个参数。对于大多数Unix命令,它将包含一个表示成功的
0
,如果发生错误,它将包含任何其他整数。

查看错误:

[0] => sh: /usr/local/bin/ffmpeg: No such file or directory
它相当明确地指出了问题所在(ffmpeg二进制根本不存在)。您可以尝试的是选择领先路线,并简单地执行以下操作:

ffmpeg -i /home/myaccount/public_html/upload/videos/original/86.69.191.177_1305714026.mpeg -ar 22050 -ab 128 -b 3600 -f flv -s 320x240 /home/myaccount/public_html/upload/videos/flv/86.69.191.177_1305714026.flv

这样,它将在OS的PATH变量中定义的所有路径中查找ffmpeg。(通常放在/bin/sbin/usr/bin/usr/sbin等位置)

ffmpeg的输出非常详细,它说了什么?当您尝试从命令行执行相同操作时会发生什么情况?如果您没有将错误消息传送到stdout,请查看服务器
error.log
以获取提示。感谢@Raoul,该错误只会生成错误消息。是否有方法获取其他/更精确的错误消息?我没有在命令行中尝试,因为我直接在远程服务器上进行测试。谢谢@Mario,这是个好主意。查找创建的日志文件,也可以远程连接并从命令行进行测试。如果从命令promptTanks@mario中你根本不知道它是有效的,那么尝试自动化一些东西是浪费时间的。第二个参数是什么?另外,我在这里没有声明第2个和第3个变量。
$output
将是实际输出的数组。exec()结果字符串只包含命令的最后一行输出。谢谢@mario,我正在做这个测试。使用
echo exec(“哪个ffmpeg”)
验证。您应该使用echo exec(just)进行测试。如果它不输出任何内容,则未安装ffmpeg。这将解释为什么它不工作。感谢您的帮助Jon。我刚刚根据下面@Mario的建议解决了此问题。