Php 从ffmpeg返回成功或失败
在通过if/then语句满足某些条件后,我在PHP中执行了一些代码,如下所示:Php 从ffmpeg返回成功或失败,php,ffmpeg,Php,Ffmpeg,在通过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 en
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.";
}
*/
}
正如您所看到的,我遇到的问题是,如果(成功),应该用什么来代替。这段代码的要点是对照一组已知的扩展名检查文件扩展名,这些扩展名是视频格式的,而不是mp4格式的。如果通过此检查,ffmpeg应运行并转换为mp4
这里有几个问题。首先,我如何返回一个状态来告诉我它是转换、成功还是失败?其次,如何异步运行?也就是说,如果我想转换多个文件,我能这样做吗?我是否能够限制ffmpeg,以确保它不会占用服务器的所有处理能力,并在不经意间使站点陷入瘫痪
或者有没有比这更好的方法来转换文件?我敢肯定我的方法一定很粗糙
编辑:除此之外,如何在后台运行ffmpeg,以便用户可以关闭页面和/或启动同一页面的另一个实例进行多次同时转换?是否可以包含每次转换的实时进度状态?我喜欢您使用exec。您是否注意到该命令的php.net条目?它的签名如下:
string exec ( string $command [, array &$output [, int &$return_var ]] )
您使用的是$command参数,而不是$output或$return\u var。因此,这里基本上有两种选择:
1-将$output参数添加到exec命令并打印。一旦你知道了回报,你就可以利用这些信息来帮助你进行逻辑分析。(如果在控制台上运行命令,$output参数将填充任何打印到控制台的输出。)注意,您可能需要添加选项-loglevel“verbose”
,以查看有用的输出。
exec("ffmpeg -i -loglevel 'verbose' ".$fileName.".".$ext." -s 640x360 ".$fileName.".mp4", $my_output_var);
print_r($my_output_var);<br>
当我不忙的时候,我会尝试一下,但与此同时,我想你对我问题底部的编辑一无所知?在命令的最后添加一个空格和一个符号。这将告诉Linux您希望它在后台运行:exec(“ffmpeg-i”。$fileName.”.“$ext.”-s 640x360.“$fileName.”.mp4&;”;顺便说一句,您可能需要修改流程以获得更可靠的用户体验:首先,我将此应用程序分为三个脚本—一个接受用户请求,一个报告请求状态,另一个执行处理工作。接受用户请求的脚本将请求数据写入数据库。报告请求的脚本将从数据库中读取。执行该工作的脚本将执行该工作,然后更新数据库中的一行。它将在crontab上运行。当前我的代码是exec(“/ffmpeg/ffmpeg-loglevel'verbose'-i'。$fileNameIn.”.$ext.“'.$fileNameOut.”.flac'/dev/null 2>/var/www/resources/ffmpegAudio.log&“,$ffmpegOutput)代码>输出到日志文件,但我在其中看不到进度信息。此外,这是一个管理功能,而不是用户功能,如果这有区别的话。如果用户体验让事情对我来说过于复杂,那么它就不是优先考虑的。
exec("ffmpeg -i ".$fileName.".".$ext." -s 640x360 ".$fileName.".mp4", $my_output_var, $var);
if($var == 0){
// do something
}