2010-03-24 9 views
10

J'utilise ffmpeg build pour windows pour créer des miniatures vidéo. La commande fonctionne bien en ligne de commande mais pas à partir de la méthode PHP exec. utilise PHP 5.2.11FFMPEG s'exécutant en ligne de commande mais pas PHP

Voici la commande.

"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 

Quelqu'un peut-il aider. J'ai vérifié les autorisations, ils semblent bien. GD est installé.

Le msg d'erreur est 'E:/Documents' is not recognized as an internal or external command, operable program or batch file

Am en utilisant des barres obliques avant dans mes chemins, sauf quand échapper des guillemets doubles

La fonction 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"; 
     } 
    } 
} 

assez drôle si je cours sans $ et $ sur le chemin absolu c'est ce que je reçois

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

montrent comment vous l'exécutez avec PHP. Quel message d'erreur vous avez. L'exécutez-vous contre un serveur Web. Si oui, êtes-vous autorisé à aller à 'E: \ Documents and Settings'? Etc etc Vous devez montrer plus d'informations! – ghostdog74

+0

J'utilise Windows XP donc je doute qu'il y ait des problèmes de permissions – Freeman

Répondre

1

échappez-vous correctement à vos antislashs, citations, etc.? Y a-t-il un message d'erreur?

1

Le message d'erreur indique qu'il ne le reconnaît pas comme une commande. C'est probablement votre citation. Vérifiez votre citation des espaces blancs. Échapper les espaces blancs lorsque nécessaire en utilisant slash "\". Et où est votre extrait de code qui appelle exec()?

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

Voici une de mes je l'ai utilisé dans le passé (accordai je suis sur une pile LAMP):

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

Vous pouvez également envisager: http://ffmpeg-php.sourceforge.net/

1

Peut-être essayer ceci:

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

Vous devez échapper à votre commande correctement:

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

Avez-vous aussi le mode PHP sécurisé? Vous devriez vérifier que $in est un vrai fichier avant d'essayer de coder aussi.

+0

+1 pour le mode sans échec. Il peut appliquer les limitations par défaut open_basedir qui excluent la commande exec pour atteindre la commande ffmpeg. – Giuseppe

1

Je l'utilise de cette façon ::

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"); 

connecté directement du serveur WAMP.

Notez le:

./output4.mp4

Cela dit PHP que je traite avec le répertoire en cours.

--Tous les meilleurs

Questions connexes