从ffmpeg返回成功或失败



我在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
}

相关内容

  • 没有找到相关文章

最新更新