FFMPEG脚本不在php中运行

FFMPEG脚本不在php中运行,php,video,ffmpeg,Php,Video,Ffmpeg,我试图让用户在我的网站上压缩他们的视频。网站是在内部网环境中使用的 我使用这个脚本压缩视频使用php。用户可以从任何位置上传视频文件,但代码无效 $filePath = dirname(__FILE__); shell_exec("C:\\ffmpeg\\bin\\ffmpeg.exe -i C:\\$filePath -vcodec libx264 -crf 20 output.mp4 > logfile.txt 2>&1"); logfile.txt ffmpeg v

我试图让用户在我的网站上压缩他们的视频。网站是在内部网环境中使用的

我使用这个脚本压缩视频使用php。用户可以从任何位置上传视频文件,但代码无效

$filePath = dirname(__FILE__);
shell_exec("C:\\ffmpeg\\bin\\ffmpeg.exe -i C:\\$filePath -vcodec libx264 -crf 20 output.mp4 > logfile.txt 2>&1"); 
logfile.txt

ffmpeg version N-76822-g12a419d Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 5.2.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
  libavutil      55.  9.100 / 55.  9.100
  libavcodec     57. 16.100 / 57. 16.100
  libavformat    57. 19.100 / 57. 19.100
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6. 15.100 /  6. 15.100
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
C:\C:\wamp\www\testNxServer\trynewnew\menu\stream\video: Invalid argument
完整源代码

upload.php

    <?php

$allowedExts = array("jpg", "jpeg", "gif", "png", "mp3", "mp4", "wma");
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
$filePath = dirname(__FILE__);

if ((($_FILES["file"]["type"] == "video/mp4")
|| ($_FILES["file"]["type"] == "audio/mp3")
|| ($_FILES["file"]["type"] == "audio/wma")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg"))

&& ($_FILES["file"]["size"] < 20000000000)
&& in_array($extension, $allowedExts))

  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
          shell_exec("C:\\ffmpeg\\bin\\ffmpeg.exe -i C:\\$filePath -vcodec libx264 -crf 20 output.mp4 > logfile.txt 2>&1"); 
          //shell_exec("C:\\ffmpeg\\bin\\ffmpeg.exe -i video.mp4 -vcodec libx264 -crf 20 output.mp4 > logfile.txt 2>&1");
            move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

对于这部分代码:

shell_exec("C:\\ffmpeg\\bin\\ffmpeg.exe -i C:\\$filePath -vcodec libx264 -crf 20 output.mp4 > logfile.txt 2>&1"); 
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
您可以在发布的日志文件中看到,它正在尝试打开C:\C:\…\video

因此,在shell查询中不需要额外的C:\\。此外,如果输入文件中有空格,则应将其置于引号中。最后,move_upload_file()调用似乎在移动最初上载的文件,而不是ffmpeg生成的output.mp4文件

也许这更像你需要的

shell_exec("C:\\ffmpeg\\bin\\ffmpeg.exe -i \"$filePath\" -vcodec libx264 -crf 20 \"upload\\{$_FILES['file']['name']}\" > logfile.txt 2>&1"); 

你好如果您指的是logfile.txt,那么它是空的。。没有错误..我的意思是
stdout
。什么是
echo
ed?你的
PHP
脚本的输出是什么?我现在得到的输出视频文件在没有压缩的情况下被复制到upload文件夹。让我们来看看。我在输出上被拒绝了权限是的,我刚刚注意到,在不是由PHP上传的文件上不允许移动上传的文件。试着让ffmpeg直接输出到你想要的地方,我不确定完整的目录应该是什么,所以你可以把它放在你需要的地方。请参阅已编辑的ffmpeg调用。权限仍被拒绝。。将文件路径更改为video.mp4可以正常工作,但用户必须将video.mp4存储在同一位置。。允许用户从任何位置上传的任何帮助?