使用命令行可以正常工作的FFMpeg,在PHP中使用exec()却无法工作。

4

我正在使用FFMpeg来转换视频,从命令行中运行正常。我正在使用以下命令:

ffmpeg -i input.mpg  -vcodec libx264 -b 819200 -s 100x100 -g 15 -bf 3 -b_strategy 1 -coder 1 -qmin 10 -qmax 51 -sc_threshold 40 -flags +loop -cmp +chroma -me_range 16 -me_method hex -subq 5 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -directpred 1 -flags2 +fastpskip -dts_delta_threshold 1 -acodec libfaac -ab 48000 output.m4v

然而,当我使用PHP exec()运行该命令时,输出视频未正确编码,变得扭曲和裁剪。我在PHP中使用以下内容:

$output = exec($cmd . ' 2>&1', $output, $return);
$output返回一个成功代码'0'。
有没有人有什么建议?
谢谢。
3个回答

8

这很不寻常。可能是因为您安装了多个ffmpeg二进制文件,而被PHP / Apache用户调用的二进制文件与您从命令行调用的二进制文件不同。

尝试在exec()中指定完整的ffmpeg二进制文件路径(例如/usr/bin/ffmpeg)。


你是一个传奇!点赞。非常感谢!据我所知,我没有两个版本,但是将绝对路径放置后问题立即解决了。再次感谢你。 - Kit
我刚刚安装了ffmpeg,怀疑重新启动Apache可能会解决问题 - 但这样也可以!(只获取海报帧,因此执行时间不是问题)。 - Ecropolis

1

听起来好像是有些命令行选项丢失或被修改了。我建议将其拆分为两个步骤:

  1. 实时编写一个shell脚本(从PHP),包含所有正确的命令参数(使其可执行)
  2. 执行该shell脚本(从PHP)

在执行此操作之前,请确保将exec()替换为passthru()无法解决问题。如果可以解决问题,那么这将是更快/更容易的解决方法。 - Teddy
谢谢您的回复。您能详细说明一下我应该如何编写shell脚本吗?我对此不是很熟悉。Chris - Kit

0

我可能会尝试:

1)将“2>&1”更改为“2>&1&”

此外,转码可能需要一段时间。您确定等待足够长的时间以完成转码吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接