我在PHP中执行了一些代码,通过if/then语句满足了一些条件,看起来像这样:
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,以便页面可以关闭,和/或用户可以启动同一页面的另一个实例进行多个同时转换?是否有可能包括每次转换的实时进度状态?
我喜欢你使用exec。您注意到该命令的php.net条目了吗?它的签名是这样的:
string exec ( string $command [, array &$output [, int &$return_var ]] )
您正在使用$command参数,而不是$output或$return_var。这里你有两个选择:
1 -在exec命令和print_r中添加$output参数。一旦你知道了回报,你就可以利用这些信息来帮助你进行逻辑分析。(如果在控制台上运行该命令,$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(这意味着命令执行成功)。
exec("ffmpeg -i ".$fileName.".".$ext." -s 640x360 ".$fileName.".mp4", $my_output_var, $var);
if($var == 0){
// do something
}