我正在使用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是我的回归变种。
现在当我打印$var
时,我得到一个空数组。
请告知我失踪的地方。
答案 0 :(得分:4)
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
如果您需要实际输出,可以将@Component("userDetails")
public class UserDetails {
@Resource(name="address")
@Autowired
private List<Address> address;
public List<Address> getAddress() {
return address;
}
@Autowired
public void setAddress(List<Address> address) {
this.address = address;
}
}
重定向到@Component("address")
public class Address {
private String area;
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
}
,因为您没有使用它,只需在命令末尾放置public class AppMain {
public static void main(String args[]){
AbstractApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Address address = (Address)context.getBean("address");
//setting first value:
address.setArea("XXX");
Address address1 = (Address)context.getBean("address");
//setting second value
address1.setArea("YYY");
UserDetails userDetails = (UserDetails)context.getBean("userDetails");
System.out.println("User Size: "+application.getAddress().size());
System.out.println("User Details : "+application.getAddress().get(0).getArea());
System.out.println("User Details : "+application.getAddress().get(1).getArea()); // getting ArrayIndexOutOfBoundException in this line
}
}
或使用PHP { {3}}执行它。