2010-03-24 16 views
10

Estoy usando ffmpeg build para Windows para hacer miniaturas de video. El comando funciona bien en línea de comandos pero no desde el método PHP exec. estoy usando PHP 5.2.11FFMPEG ejecutándose en la línea de comandos, pero no en PHP

Aquí está el comando.

"E:/Documents and Settings/x/WINDOWS/ffmpeg" -itsoffset -4 -v "E:/Program Files/Apache Software Foundation/Apache2.2/htdocs/bs/files/videogal/c08c3d20eeb9083ed033577bd154cba6.flv" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 "E:/Program Files/Apache Software Foundation/Apache2.2/htdocs/bs/files/gallery/8ff43b72b932d2a34e7a6733672ad4d6.jpg" 2>&1 

Alguien puede ayudar. Revisé los permisos que parecen estar bien. GD está instalado.

El error msg es 'E:/Documents' is not recognized as an internal or external command, operable program or batch file

Am utilizando barras inclinadas en mis caminos, excepto cuando se escapan comillas dobles

La función de PHP

function ExtractThumb($in, $out) 
{$path=dbconf::FFMPEG_PATH; 
    $thumb_stdout; 
    $errors; 
    $retval = 0; 
echo $in; 
    // Delete the file if it already exists 
    if (file_exists($out)) { unlink($out); } 

    // Use ffmpeg to generate a thumbnail from the movie 
    $cmd = "$path -itsoffset -4 -i $in -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 $out 2>&1"; 
    echo $cmd; 

    exec($cmd, $thumb_stdout, $retval); 

    // Queue up the error for processing 
    if ($retval != 0) { $errors[] = "FFMPEG thumbnail generation failed"; } 

    if (!empty($thumb_stdout)) 
    { 
     foreach ($thumb_stdout as $line) 
     { 
      echo $line . "\n"; 
     } 
    } 

    if (!empty($errors)) 
    { 
     foreach ($errors as $error) 
     { 
      echo $error . "\n"; 
     } 
    } 
} 

lo suficientemente divertido si me quedo sin el $ y $ ruta absoluta esto es lo que obtengo

Copyright (c) 2000-2009 Fabrice Bellard, et al. configuration: --extra-cflags=-fno-common --enable-memalign-hack --enable-pthreads --enable-libmp3lame --enable-libxvid --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libfaac --enable-libgsm --enable-libx264 --enable-libschroedinger --enable-avisynth --enable-swscale --enable-gpl libavutil 49.12. 0/49.12. 0 libavcodec 52.10. 0/52.10. 0 libavformat 52.23. 1/52.23. 1 libavdevice 52. 1. 0/52. 1. 0 libswscale 0. 6. 1/0. 6. 1 built on Jan 13 2009 02:57:09, gcc: 4.2.4 822ae86a93810dade2843e822390d723.flv: no such file or directory 
+0

muestra cómo lo está ejecutando con PHP. Que mensaje de error tienes ¿Lo está ejecutando contra un servidor web? En caso afirmativo, ¿se le permite ir a 'E: \ Documents and Settings'? Etc etc. ¡Tiene que mostrar más información! – ghostdog74

+0

Estoy usando Windows XP, así que dudo si hay problemas con los permisos – Freeman

Respuesta

1

¿está escapando correctamente de sus barras diagonales inversas, citas, etc.? ¿Hay algún mensaje de error?

1

El mensaje de error dice que no lo reconoce como un comando. Es muy probable que sea su cotización. Verifique su cotización de espacios en blanco. Escape de los espacios en blanco cuando sea necesario con la barra "\". ¿Y dónde está el fragmento de código que llama al exec()?

3
exec("\"E:\\Documents and Settings\\x\\WINDOWS\\ffmpeg\" -i <inputfile> <options> <outfile>"); 

Aquí está una de las minas que he usado en el pasado (concedidas Estoy en una pila LAMP):

$cmd = "/usr/bin/ffmpeg -i ".$in." -y -an -sameq -vframes 1 -s 100x56 -ss 3 -t 0.001 ".$out; 

También puede considerar: http://ffmpeg-php.sourceforge.net/

1

Tal vez intente esto:

$cmd = "\"$path\" -itsoffset -4 -i \"$in\" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 \"$out\" 2>&1"; 
3

tiene que escapar su comando correctamente:

exec(escapeshellcmd($cmd), $thumb_stdout, $retval); 

¿Tiene también el modo seguro de PHP activado? Debe verificar que $in es un archivo real antes de intentar codificar también.

+0

+1 para el modo seguro activado. Puede aplicar limitaciones predeterminadas de open_basedir que excluyan el comando exec para llegar al comando ffmpeg. – Giuseppe

1

que usarlo de esta manera ::

exec("C:/wamp/bin/ffmpeg -i ./output4.mp4 -sameq -acodec libmp3lame -ar 22050 -ab 32 -f flv -s 320x240 ./output8.flv -vcodec mjpeg -vframes 4 -an -f rawvideo -s 320x240 ./pic008.jpg 2>&1"); 

Conectado directamente desde WAMP SERVER.

Aviso al:

./output4.mp4

que le dice a PHP que estoy tratando con el directorio actual.

--Todo el mejor

Cuestiones relacionadas