我正在使用ffmpeg命令为视频加水印.
它做的工作,但我需要检测它是否成功执行.
我的命令:
$mark = "ffmpeg -i ".$inputvideo." -i logo.png -filter_complex ". '"overlay=x=(main_w-overlay_w):y=(main_h-overlay_h)"'." ".uniqid()."html56.mp4";
对于输出我使用了类似的东西:
$x = exec($mark);
print_r($x);
但我没有得到任何印刷代替$x.
经过一番搜索后,我发现了exec命令的这个语句
string exec ( string $command [, array &$output [, int &$return_var ]] )
$s=exec($mark,$var);
$var is my return var.
现在,当我打印$var时,我得到一个空数组.
请建议我失踪的地方.
解决方法:
string exec ( string $command [, array &$output [, int &$return_var ]] )
当你执行$s = exec($mark,$var);你的$var对应于$output是空的,因为ffmpeg将信息输出到sderr,因为stdout可能用于实际的数据输出.
如果要获取返回代码,即使不使用它们,也必须指定所有前面的可选参数:
$s = exec($mark,$output,$var)
如果您需要实际输出,您可以将stderr重定向到stdout,因为您没有使用它,只需在命令末尾放置2>& 1或使用PHP的proc_open()执行它.