我想让用户在我的网站上压缩他们的视频。网站用于Intranet环境。
我正在使用此脚本使用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";
}
?>
答案 0 :(得分:0)
对于此段代码:
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_uploaded_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");