2011-02-25 129 views
4

我正在使用FFMpeg来隐藏视频,并且它从命令行正常工作。我使用下面的命令:FFMpeg在命令行中工作,但不在PHP中使用exec();

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); 

$输出返回'0'的成功代码。

有没有人有任何建议?

谢谢。

回答

7

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

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

+0

你是个传奇!给予好评。非常感谢!据我所知,我没有两个版本,但把绝对路径直接排序。再次感谢你。 – Kit

+0

没问题,很高兴你能工作! – glomad

+0

我刚刚安装了ffmpeg,并怀疑可能重启Apache会做到这一点 - 但这一切都一样! (只抓取海报帧,所以执行时间不是问题)。 – Ecropolis

1

这听起来像一些命令行选项正在丢失/改变。我会尝试这个分成2部分的过程:

  1. 写一个shell脚本上即时(从PHP)拥有所有正确的命令参数(使其可执行文件)
  2. 执行shell脚本(来自PHP)
+0

在执行此操作之前,请确保使用passthru()替换exec()不会解决问题。这将是一个更快/更简单的修复,如果它的工作。 – Teddy

+0

谢谢你的回复。请您详细说明我将如何编写shell脚本?我对此不太了解。 Chris – Kit

0

我可能会尝试:

1)改变 '2> & 1' 到 '2> '

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

相关问题