Windows上的PHP-FFMpeg安装和基本用法问题

时间:2017-03-01 00:23:57

标签: php ffmpeg


跟随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

网络服务器配置

  • Windows 10 Pro
  • IIS 10
  • PHP 7.0.9

网站根目录---&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

2 个答案:

答案 0 :(得分:0)

docs说:

  

此库需要安装FFMpeg。您将需要FFMpeg和FFProbe二进制文件才能使用它。确保可以使用系统PATH找到这些二进制文件以获得二进制检测的好处,否则您必须在加载时明确指定二进制文件路径。

您需要将这些存储在永久性的位置,然后将此路径添加到您的系统或用户PATH变量中:

Windows System Properties

System Path environment variable

您可以将&#34 ;; c:\ my \ path \添加到\ ffmpeg&#34;到PATH值的末尾。

答案 1 :(得分:0)

我也有这个问题。花了两天使用procmon来确定为什么PHP在新的Windows 2016安装上没有启动ffprobe.exe。

如果您的IIS AppPool标识至少没有修改C:\ Windows \ temp文件夹中的写入,则会出现这种误导性错误。

您可以使用(不要与get_current_user()提供的用户上下文混淆)获取您网站的应用程序池标识/上下文。):

&#13;
&#13;
echo "Get ENV: ".getenv("APP_POOL_ID");
Or
echo "Get SERVER: ".$_SERVER["APP_POOL_ID"];
&#13;
&#13;
&#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永远不会执行。

希望这有助于某人。