我的代码失败了:
$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位置。现在怎么样?
答案 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等。)