2010-03-24 6 views
10

Ich benutze ffmpeg Build für Windows, um Video-Thumbnails zu machen. Der Befehl funktioniert gut in der Befehlszeile, aber nicht von der PHP-Exec-Methode. verwende PHP 5.2.11FFMPEG läuft in der Befehlszeile, aber nicht PHP

Hier ist der Befehl.

"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 

Kann jemand helfen. Ich habe die Berechtigungen überprüft, die ihnen gut erscheinen. GD ist installiert.

Der Fehler msg ist 'E:/Documents' is not recognized as an internal or external command, operable program or batch file

Am schlitzt mit vorwärts in meinen Wegen, außer wenn doppelte Anführungszeichen zu entkommen

Die PHP-Funktion

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

lustig genug, wenn ich ohne den $ zulaufen und $ out absoluten Pfad ist das, was ich bekommen

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

zeigen, wie Sie es mit PHP ausführen. Welche Fehlermeldung haben Sie? Führen Sie es gegen einen Webserver aus. Wenn ja, darfst du zu "E: \ Dokumente und Einstellungen" gehen? Usw. usw. Du musst mehr Infos anzeigen! – ghostdog74

+0

Ich benutze Windows XP, also bezweifle ich, ob es Probleme mit Berechtigungen – Freeman

Antwort

1

entkommst du deinen Backslashes, Zitaten etc. richtig? Gibt es eine Fehlermeldung?

1

Die Fehlermeldung besagt, dass es nicht als Befehl erkannt wird. Es ist wahrscheinlich dein Zitat. Überprüfen Sie Ihr Angebot von Leerzeichen. Entfliehen Sie bei Bedarf den Leerstellen mit dem Schrägstrich "\". Und wo ist Ihr Code-Snippet, das exec() aufruft?

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

Hier ist eine von mir ich in der Vergangenheit verwendet haben (gewährte ich auf einem LAMP-Stack bin):

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

Sie können auch prüfen: http://ffmpeg-php.sourceforge.net/

1

Vielleicht versuchen:

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

Sie benötigen Befehl richtig zu entkommen:

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

Haben Sie auch PHP Safe Mode? Sie sollten überprüfen, ob eine echte Datei ist, bevor Sie versuchen, auch zu verschlüsseln.

+0

+1 für den abgesicherten Modus gibt. Es kann die standardmäßigen Einschränkungen von open_basedir anwenden, die den Befehl exec ausschließen, um den Befehl ffmpeg zu erreichen. – Giuseppe

1

Ich benutze es auf diese Weise ::

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

Direkt von WAMP Server verbunden. die

Hinweis:

./output4.mp4

Das PHP erzählt, dass ich mit dem aktuellen Verzeichnis zu tun habe.

--Alle die besten

Verwandte Themen