在通过if / then语句满足一些标准后,我在PHP中执行了一些代码,如下所示:
if(in_array($ext,$video)&&($ext!=="mp4")){
exec("ffmpeg -i ".$fileName.".".$ext." -s 640x360 ".$fileName.".mp4");
/*
if(successful){
unlink($fileName.$ext);
$status="Video entry approved. File converted.";
}
*/
}
正如您所看到的,我遇到的问题是试图找出应该代替if(successful)
的内容。代码的这一部分的重点是检查文件扩展名是否已经采用视频格式的已知扩展数组,而且还不是mp4格式。如果通过此检查,则应运行ffmpeg并转换为mp4。
这里有几个问题。首先,我如何返回状态告诉我它是转换,成功还是失败?其次,如何以异步方式运行?也就是说,如果我想转换多个文件,我能够这样做吗?我是否能够限制ffmpeg以确保它不会占用我所有服务器的处理能力并且无意中使网站停止运行?
或者有更好的方法来转换文件吗?我很确定我的方法必须粗糙。
编辑:除此之外,如何在后台运行ffmpeg,以便可以关闭页面,和/或用户可以启动同一页面中的其他实例进行多个同步转换?是否可以包含每次转换的实时进度状态?
答案 0 :(得分:0)
我喜欢你对exec的使用。您是否碰巧注意到该命令的php.net条目?它的签名如下:
string exec ( string $command [, array &$output [, int &$return_var ]] )
您使用的是$ command参数,但不是$ output或$ return_var。所以你基本上有两个选择:
1 - 将$ output参数添加到exec命令和print_r。一旦您知道返回,您就可以使用该信息来帮助您了解逻辑。 (如果您在控制台上运行命令,则$ output参数将填充打印到控制台的任何输出。)请注意,您可能必须添加选项-loglevel 'verbose'
以查看有用的输出。
exec("ffmpeg -i -loglevel 'verbose' ".$fileName.".".$ext." -s 640x360 ".$fileName.".mp4", $my_output_var);
print_r($my_output_var);<br>
2-添加$ output和$ return_var,然后检查以确保$ return_var等于0(这意味着命令执行成功)。可以找到返回变量列表here:
exec("ffmpeg -i ".$fileName.".".$ext." -s 640x360 ".$fileName.".mp4", $my_output_var, $var);
if($var == 0){
// do something
}