我需要读取 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()
获得了有效的状态,并从命令行运行相同的命令给了我大量的输出。我觉得我一定错过了一些明显的东西,但我不知道它是什么。 而不是 stderr (请参阅 标准流)。
更改此行:
$command = "/usr/bin/ffmpeg -i " . $src;
进入
$command = "/usr/bin/ffmpeg -i " . $src . " 2>&1";
再试一次:)
$output = shell_exec('ffprobe -v quiet -print_format json -show_format -show_streams "path/to/yourfile.ext"');
$parsed = json_decode($output, true);
您的所有视频信息都在 php 数组中!由于某种原因,这比 ffmpeg -i 快得多。
exec("ffmpeg -i input.avi output.mp4 2>&1", $output, $returnStatus);
print_r($output);
if($returnStatus === 0){
// success
}
else {
//fail
}
exec("ffmpeg -i input.avi -vcodec h264 -acodec aac -strict -2 output.mp4 2>&1",$output);
echo "<pre>";
print_r($output);
echo "</pre>";