通过PHP的proc_open函数调用FFmpeg时,如果输出被发送到标准错误而不是标准输出,可能是由于FFmpeg的输出流被错误地重定向到了标准错误流。为了解决这个问题,可以在调用proc_open函数时,通过设置参数来正确地重定向FFmpeg的输出流。
以下是一个示例代码,展示了如何正确地调用FFmpeg并将输出发送到标准输出:
$descriptors = [
0 => ['pipe', 'r'], // 标准输入
1 => ['pipe', 'w'], // 标准输出
2 => ['pipe', 'w'], // 标准错误
];
$process = proc_open('ffmpeg -i input.mp4 output.mp4', $descriptors, $pipes);
if (is_resource($process)) {
// 读取标准输出
$output = stream_get_contents($pipes[1]);
fclose($pipes[1]);
// 读取标准错误
$error = stream_get_contents($pipes[2]);
fclose($pipes[2]);
// 等待进程结束
$status = proc_close($process);
if ($status === 0) {
// 执行成功
echo "FFmpeg执行成功!";
echo "输出:".$output;
} else {
// 执行失败
echo "FFmpeg执行失败!";
echo "错误信息:".$error;
}
}
在上述代码中,我们通过设置proc_open函数的参数来创建了一个子进程,并将FFmpeg的输出流重定向到标准输出流。然后,我们可以通过stream_get_contents函数读取标准输出和标准错误的内容,并根据进程的返回值判断FFmpeg的执行结果。
请注意,上述代码仅为示例,实际使用时需要根据具体情况进行适当的修改和错误处理。
推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云对象存储(COS)、腾讯云音视频处理(MPS)。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云