解決策を試すにも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/videos/video1.wmv 2>&1"と同じ結果が得られます。 Ubuntuにstderrをリダイレクトするためのいくつかの違いがあるかどうかを調べるためにいくつかの調査を行います。 –
私は次のことが有効であることを確認できます。私はホビープロジェクトでこの正確なラインを一度使ってきました。 exec( 'ffmpeg -i'。エスケープシェルカー($ filepath)。 '2>&1'、$ output); – Werner
Ahha!私はそれを考え出した。私の問題はescapeshellcmd()関数でした。 "2>&1"を "2 \> \&1"に変更していました。私はあなたのコードを試して、それは働いた。レッスン私は学んだことがあります:あなたはそれをすべて変更した後*コマンドを出力します。ありがとう。 –