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

时间:2011-05-18 10:31:58

标签: 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.'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位置。现在怎么样?

2 个答案:

答案 0 :(得分:2)

另见using shell_exec to call a perl script from php。在您的情况下,您可以使用以下方法获取特定的错误消息,但也可以获得一般$result错误级别

exec("$ffmpegDo 2>&1", $output, $result);
if ($result != 0) {
    $error[] = ERROR_EXEC_FFMPEGDO.':'.$ffmpegDo; 
}

exec的第三个参数指定结果变量。对于大多数Unix命令,它将包含0表示成功,以及任何其他整数(如果发生错误)。

答案 1 :(得分: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等。)