Freeman
Freeman

Reputation: 321

FFMPEG running in Command Line but not PHP

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

Upvotes: 11

Views: 5869

Answers (6)

ErickBest
ErickBest

Reputation: 4692

I use it this way::

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

Directly connected from WAMP SERVER.

Notice the:

./output4.mp4

That tells PHP that I am dealing with the current directory.

--All the Best

Upvotes: 1

Giles Smith
Giles Smith

Reputation: 166

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.

Upvotes: 4

davr
davr

Reputation: 19147

Maybe try this:

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

Upvotes: 1

B00MER
B00MER

Reputation: 5491

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/

Upvotes: 4

ghostdog74
ghostdog74

Reputation: 342977

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()?

Upvotes: 1

varzan
varzan

Reputation: 587

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

Upvotes: 1

Related Questions