FFMPEG脚本不在php中运行
我试图让用户在我的网站上压缩他们的视频。网站是在内部网环境中使用的 我使用这个脚本压缩视频使用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
$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存储在同一位置。。允许用户从任何位置上传的任何帮助?