[英]PHP-FFMpeg Installation and Basic Usage on windows issue
按照自述文件,我通過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');
?>
但我收到“找不到可執行文件”錯誤,因為我不知道將它們放在哪里
我還嘗試使用以下命令指定二進制文件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"'
得到'ffprobe failed to execute command "C:/FFmpeg/bin/ffprobe.exe" "-help" "-loglevel" "quiet"'
我究竟做錯了什么?
編輯2
Web服務器配置
網站根目錄---> C:\\inetpub\\wwwroot\\site\\
內容:
-index.php
-input.mp4
-供應商/(PHP-FFMpeg庫文件夾)
FFmpeg二進制文件---> 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
文檔說:
該庫需要有效的FFMpeg安裝。 您將需要FFMpeg和FFProbe二進制文件才能使用它。 確保可以使用系統PATH找到這些二進制文件,以獲取二進制文件檢測的好處,否則,您必須在加載時顯式給出二進制文件路徑。
您將需要將它們存儲在永久位置,然后將此路徑添加到您的System或User PATH變量中:
您可以在PATH值的末尾添加“; c:\\ my \\ path \\ to \\ ffmpeg”。
我也有這個問題。 使用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"];
根據我的分析,這是因為PHP-CGI.exe,CMD.exe和ffmpeg exe(ffmpeg.exe,ffprobe.exe,ffplay.exe)使用temp文件夾中的平面文件來交換和解析信息。 當PHP-CGI.exe在此位置創建一個臨時文件時,所有其他進程只能從該臨時文件讀取,而將其保留為空0字節。 每次加載頁面時,我都會將這些空的臨時文件寫入C:\\ Windows \\ Temp,並且ffprobe.exe永遠不會執行。
希望這對某人有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.