Necesito leer la salida de ffmpeg para incluso probar la solución a my question from yesterday. Este es un problema aparte de mi problema allí, así que formulé una nueva pregunta.Capturar salida FFMPEG
¿Cómo diablos obtengo la salida de un comando ffmpeg -i
en PHP?
Esto es lo que he estado intentando:
<?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/>";
?>
Este es mi resultado:
<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/>
yo no lo entiendo. safe_mode
está desactivado. No hay nada en disable_functions
. El directorio es propiedad por www-data
(el usuario apache en mi sistema Ubuntu). Obtengo un estado válido de exec()
y system()
y ejecutando el mismo comando desde la línea de comandos me da toneladas de salida. Siento que debo estar perdiendo algo obvio, pero no tengo idea de qué se trata.
Ahhh ... sí. Eso tiene sentido porque mi estado de devolución es 1 (no 0). Ojalá hubiera funcionado, pero aún obtengo el mismo resultado, solo con: "/usr/bin/ffmpeg -i /var/videos/video1.wmv 2> & 1" al principio. Haré un poco de investigación para ver si Ubuntu tiene algunas diferencias para redirigir stderr. –
Puedo confirmar que lo siguiente debería funcionar. He usado esta línea exacta en un proyecto de hobby una vez. exec ('ffmpeg -i'. Escapeshellarg ($ filepath). '2> & 1', $ salida); – Werner
¡Ahha! Me lo imaginé. Mi problema era la función escapeshellcmd(). Estaba cambiando "2> & 1" a "2 \> \ & 1". Probé tu código y funcionó. Lección que aprendí: envíe el comando * después * de que haya realizado todas las modificaciones en él = p. Gracias. –