跟随README我通过Composer安装了PHP FFmpeg,我从https://ffmpeg.zeranoe.com/builds/下载了二进制文件
现在我试图运行"基本用法"例如:
<?php
require("vendor/autoload.php");
$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open('video.mpg');
$video
->filters()
->resize(new FFMpeg\Coordinate\Dimension(320, 240))
->synchronize();
$video
->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
->save('frame.jpg');
$video
->save(new FFMpeg\Format\Video\X264(), 'export-x264.mp4')
->save(new FFMpeg\Format\Video\WMV(), 'export-wmv.wmv')
->save(new FFMpeg\Format\Video\WebM(), 'export-webm.webm');
?>
但我收到&#34;未找到可执行文件&#34;错误,因为我不知道把它们放在哪里
我还尝试使用以下方法指定二进制文件ffmpeg.exe和ffprobe.exe:
$ffmpeg = FFMpeg\FFMpeg::create(array(
'ffmpeg.binaries' => '/pathtobin/ffmpeg',
'ffprobe.binaries' => '/pathtobin/ffprobe',
'timeout' => 3600, // The timeout for the underlying process
'ffmpeg.threads' => 12 // The number of threads that FFMpeg should use
), $logger);
但仍然是同样的错误......我是从一个小山丘上建造一座山吗?任何帮助表示赞赏...谢谢
编辑1
我将ffmpeg \ bin文件夹添加到系统路径,我可以从任何地方运行cmd中的可执行文件,但现在我收到此错误:"Executable not found, proposed : avprobe, ffprobe"
...
相反,如果我明确地给出二进制路径,我得到'ffprobe failed to execute command "C:/FFmpeg/bin/ffprobe.exe" "-help" "-loglevel" "quiet"'
我做错了什么?
编辑2
网络服务器配置
网站根目录---&gt; C:\inetpub\wwwroot\site\
内容:
- index.php
- input.mp4
- vendor /(PHP-FFMpeg库文件夹)
FFmpeg二进制文件---&gt; C:\inetpub\wwwroot\FFmpeg\
内容:
- ffmpeg.exe
- ffplay.exe
- ffprobe.exe
的index.php
<?php
ini_set('display_errors', 'On'); error_reporting(E_ALL);
require("vendor/autoload.php");
$ffmpeg = FFMpeg\FFMpeg::create(array(
'ffmpeg.binaries' => 'C:/inetpub/wwwroot/FFmpeg/ffmpeg.exe',
'ffprobe.binaries' => 'C:/inetpub/wwwroot/FFmpeg/ffprobe.exe',
'timeout' => 3600, // The timeout for the underlying process
'ffmpeg.threads' => 12, // The number of threads that FFMpeg should use
));
$video = $ffmpeg->open('input.mp4');
?>
结果
Fatal error: Uncaught Alchemy\BinaryDriver\Exception\ExecutionFailureException: ffprobe failed to execute command "C:/inetpub/wwwroot/FFmpeg/ffprobe.exe" "-help" "-loglevel" "quiet" in C:\inetpub\wwwroot\site\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\ProcessRunner.php:100 Stack trace: #0 C:\inetpub\wwwroot\site\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\ProcessRunner.php(72): Alchemy\BinaryDriver\ProcessRunner->doExecutionFailure('"C:/inetpub/www...') #1 C:\inetpub\wwwroot\site\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\AbstractBinary.php(209): Alchemy\BinaryDriver\ProcessRunner->run(Object(Symfony\Component\Process\Process), Object(SplObjectStorage), false) #2 C:\inetpub\wwwroot\site\vendor\alchemy\binary-driver\src\Alchemy\BinaryDriver\AbstractBinary.php(137): Alchemy\BinaryDriver\AbstractBinary->run(Object(Symfony\Component\Process\Process), false, NULL) #3 C:\inetpub\wwwroot\site\vendor\php-ffmpeg\php-ffmpeg\src\FFMpeg\FFProbe\OptionsTester.php(61): Alchemy\Binary in C:\inetpub\wwwroot\site\vendor\php-ffmpeg\php-ffmpeg\src\FFMpeg\FFProbe\OptionsTester.php on line 63
答案 0 :(得分:0)
docs说:
此库需要安装FFMpeg。您将需要FFMpeg和FFProbe二进制文件才能使用它。确保可以使用系统PATH找到这些二进制文件以获得二进制检测的好处,否则您必须在加载时明确指定二进制文件路径。
您需要将这些存储在永久性的位置,然后将此路径添加到您的系统或用户PATH变量中:
您可以将&#34 ;; c:\ my \ path \添加到\ ffmpeg&#34;到PATH值的末尾。
答案 1 :(得分:0)
我也有这个问题。花了两天使用procmon来确定为什么PHP在新的Windows 2016安装上没有启动ffprobe.exe。
如果您的IIS AppPool标识至少没有修改C:\ Windows \ temp文件夹中的写入,则会出现这种误导性错误。
您可以使用(不要与get_current_user()提供的用户上下文混淆)获取您网站的应用程序池标识/上下文。):
echo "Get ENV: ".getenv("APP_POOL_ID");
Or
echo "Get SERVER: ".$_SERVER["APP_POOL_ID"];
&#13;
从我的分析来看,这是因为PHP-CGI.exe,CMD.exe&amp; ffmpeg exe(ffmpeg.exe,ffprobe.exe,ffplay.exe)使用temp文件夹中的平面文件来交换和解析信息。当PHP-CGI.exe在此位置创建临时文件时,所有其他进程只能读取临时文件,将其留空0字节。每个页面加载,我将这些空的临时文件写入C:\ Windows \ Temp,ffprobe.exe永远不会执行。
希望这有助于某人。