gpt4 book ai didi

php - 从 ffmpeg 返回成功或失败

转载 作者:行者123 更新时间:2023-12-04 23:29:42 25 4
gpt4 key购买 nike

在通过 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,以便可以关闭页面,和/或用户可以启动同一页面的另一个实例以进行多个同时转换?是否可以包含每次转换的实时进度状态?

最佳答案

我喜欢你对 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
}

关于php - 从 ffmpeg 返回成功或失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22434699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com