我需要读取ffmpeg的输出,才能尝试解决方案my question from yesterday。这是一个与我的问题不同的问题,所以我提出了一个新问题。捕获FFMPEG输出
如何在PHP中使用ffmpeg -i
命令获得输出?
这是我一直想:
<?PHP
error_reporting(E_ALL);
$src = "/var/videos/video1.wmv";
$command = "/usr/bin/ffmpeg -i " . $src;
echo "<B>",$command,"</B><br/>";
$command = escapeshellcmd($command);
echo "backtick:<br/><pre>";
`$command`;
echo "</pre><br/>system:<br/><pre>";
echo system($command);
echo "</pre><br/>shell_exec:<br/><pre>";
echo shell_exec($command);
echo "</pre><br/>passthru:<br/><pre>";
passthru($command);
echo "</pre><br/>exec:<br/><pre>";
$output = array();
exec($command,$output,$status);
foreach($output AS $o)
{
echo $o , "<br/>";
}
echo "</pre><br/>popen:<br/><pre>";
$handle = popen($command,'r');
echo fread($handle,1048576);
pclose($handle);
echo "</pre><br/>";
?>
这是我的输出:
<B>/usr/bin/ffmpeg -i /var/videos/video1.wmv</B><br/>
backtick:<br/>
<pre></pre><br/>
system:<br/>
<pre></pre><br/>
shell_exec:<br/>
<pre></pre><br/>
passthru:<br/>
<pre></pre><br/>
exec:<br/>
<pre></pre><br/>
popen:<br/>
<pre></pre><br/>
我不明白这一点。 safe_mode
已关闭。 disable_functions
中没有任何内容。该目录是拥有www-data
(我Ubuntu系统上的apache用户)。我从exec()
和system()
得到一个有效的状态,并从命令行运行相同的命令给我提供了大量的输出。我觉得我必须错过一些明显的东西,但我不知道它是什么。
唉唉...是啊。这是有道理的,因为我的返回状态是1(不是0)。我希望这能奏效,但我仍然得到相同的结果,只是:“/usr/bin/ffmpeg -i /var/videos/video1.wmv 2>&1”开头。我会做一些研究,看看Ubuntu是否有重定向stderr的一些差异。 – 2009-07-10 18:16:25
我可以确认下面的工作。我曾经在一个爱好项目中使用过这个确切的线。 exec('ffmpeg -i'。escapeshellarg($ filepath)。'2>&1',$ output); – Werner 2009-07-10 18:51:04
艾哈!我想到了。我的问题是escapeshellcmd()函数。它将“2>&1”更改为“2 \> \&1”。我试过你的代码,它工作。我学到的课程:在*完成对它的所有修改= p后输出命令*。谢谢。 – 2009-07-10 19:07:56