我需要讀取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