捕捉FFMPEG输出(Capture FFMPEG output)

2019-06-25 14:35发布

我需要阅读的ffmpeg从输出,以便甚至试图解决从昨天我的问题 。 这是我的问题,有一个单独的问题,所以我做了一个新的问题。

如何赫克我得到一个输出ffmpeg -i在PHP命令?

这是我一直在努力:

<?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()并在命令行中运行相同的命令给我吨产量。 我觉得我必须失去了一些东西很明显,但我不知道它是什么。

Answer 1:

问题是你只捕获标准输出标准错误没有(看到标准流 )。 改变这一行:

$command = "/usr/bin/ffmpeg -i " . $src;

$command = "/usr/bin/ffmpeg -i " . $src . " 2>&1";

并给它另一种尝试:)



Answer 2:

使用ffprobe相反,它是要快得多,并且支持JSON输出。

$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出于某种原因快得多。



Answer 3:

为了让输出状态和输出:

exec("ffmpeg -i input.avi output.mp4 2>&1", $output, $returnStatus);

print_r($output);

if($returnStatus === 0){
   // success
}
else {
   //fail
}


Answer 4:

您可以使用exec和print_r的输出...

exec("ffmpeg -i input.avi -vcodec h264 -acodec aac -strict -2 output.mp4 2>&1",$output);

echo "<pre>";
print_r($output);
echo "</pre>";


文章来源: Capture FFMPEG output
标签: php ffmpeg exec