我正在使用ffmpeg build for windows来制作视频缩略图。该命令在命令行中运行良好,但不适用于PHP exec方法。我正在使用PHP 5.2.11
这是命令。
"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
有人可以提供帮助吗?我检查了他们看起来很好的权限。已安装GD。
错误消息为'E:/Documents' is not recognized as an internal or external command, operable program or batch file
我在路径中使用正斜杠,除非转义双引号
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";
}
}
}
如果我在没有$ in和$ out绝对路径的情况下运行就足够了,这就是我得到的
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 :(得分:3)
exec("\"E:\\Documents and Settings\\x\\WINDOWS\\ffmpeg\" -i <inputfile> <options> <outfile>");
这是我过去使用的一个(授予我在LAMP堆栈上):
$cmd = "/usr/bin/ffmpeg -i ".$in." -y -an -sameq -vframes 1 -s 100x56 -ss 3 -t 0.001 ".$out;
答案 1 :(得分:3)
你需要正确地逃避你的命令:
exec(escapeshellcmd($cmd), $thumb_stdout, $retval);
你也有PHP安全模式吗?
在尝试编码之前,您应该检查$in
是否是真实文件。
答案 2 :(得分:1)
答案 3 :(得分:1)
错误消息显示它无法将其识别为命令。它最有可能是你的引用。检查你引用的空格。必要时使用斜杠“\”转义空格。您的代码段在哪里调用exec()
?
答案 4 :(得分:1)
也许试试这个:
$cmd = "\"$path\" -itsoffset -4 -i \"$in\" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 \"$out\" 2>&1";
答案 5 :(得分:1)
我用这种方式::
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");
直接从WAMP SERVER连接。
请注意:
./ output4.mp4
告诉PHP我正在处理当前目录。
- 所有最佳