PHP yakalama FFMPEG çıktı

2 Cevap php

Ben bile my question from yesterday için çözüm denemek için ffmpeg çıktı okumak gerekir. Bu benim sorunu ayrı bir konudur, bu yüzden yeni bir soru yaptı.

Ne halt çıktı PHP bir ffmpeg -i komutundan alabilirim?

Bu benim çalıştığım budur:

<?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/>";
?>

Bu benim çıkış:

<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/>

Ben alamadım. safe_mode kapalıdır. disable_functions hiçbir şey yok. Dizin owned www-data (benim Ubuntu sistemi üzerinde apache kullanıcı) gereğidir. Geri exec() ve system() ve komut satırından aynı komutu çalıştırarak bana çıkış ton vermek geçerli bir durumu olsun. Ben belirgin bir şey eksik olmalı gibi hissediyorum ama ne olduğunu hiçbir fikrim yok.

Yardım. Lütfen.

2 Cevap

The problem is you catch only stdout and not stderr (see Standard Streams). Change this line:

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

içine

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

ve başka bir denemeye :)

Bunun yerine ffprobe kullanmak, çok daha hızlıdır ve JSON çıkışını destekler.

$output = shell_exec('ffprobe -v quiet -print_format json -show_format -show_streams "path/to/yourfile.ext"');
$parsed = json_decode($output, true);

Ve bir php dizideki tüm video bilgileri var! Bu ffmpeg-i nedense çok daha hızlıdır.