tags:

views:

403

answers:

5

I am using ffmpeg build for windows to make video thumbnails . The command works well in command line but not from PHP exec method. am using PHP 5.2.11

Here is the command.

"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

Can somebody help. I checked the permissions they seem fine. GD is installed.

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

Am using forward slashes in my paths except when escaping double quotes

The PHP function

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

funny enough if I run without the $in and $out absolute path this is what I get

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
A: 

are you properly escaping your backslashes, quotes etc.? Is there any error message?

varzan
A: 

The error message says it doesn't recognize it as a command. Its most probably your quoting. Check your quoting of white spaces. Escape the white spaces when necessary using slash "\ ". And where is your code snippet that calls exec()?

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

Here's one of mine I've used in the past (granted I'm on a LAMP stack):

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

You may also consider: http://ffmpeg-php.sourceforge.net/

B00MER
A: 

Maybe try this:

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

You need to escape your command properly:

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

Also do you have PHP safe mode on? You should check that $in is a real file before trying to encode too.

Giles Smith