【问题标题】:Detect FFmpeg installation and Version检测 FFmpeg 安装和版本
【发布时间】:2010-10-24 06:48:41
【问题描述】:

我正在编写一个 PHP 脚本,它可以将上传的视频文件即时转换为 FLV,但我只希望它在用户在服务器上安装了 FFmpeg 时运行该部分脚本。

有没有办法提前检测到这一点?我可以运行一个 FFmpeg 命令并测试它是否返回“找不到命令”?

【问题讨论】:

    标签: php ffmpeg command version


    【解决方案1】:

    试试:

    $ffmpeg = trim(shell_exec('which ffmpeg')); // or better yet:
    $ffmpeg = trim(shell_exec('type -P ffmpeg'));
    

    如果返回空的 ffmpeg 不可用,否则它将保存可执行文件的绝对路径,您可以在实际的 ffmpeg 调用中使用:

    if (empty($ffmpeg))
    {
        die('ffmpeg not available');
    }
    
    shell_exec($ffmpeg . ' -i ...');
    

    【讨论】:

      【解决方案2】:

      exec()函数的第三个参数是执行程序的返回值。像这样使用它:

      exec($cmd, $output, $returnvalue);
      if ($returnvalue == 127) {
          # not available
      }
      else {
          #available
      }
      

      这适用于我的 Ubuntu 机器。

      【讨论】:

        【解决方案3】:

        你回答了你自己的问题,你可以运行命令,如果它返回否定,你就知道它没有安装,或者你可以检查用户为可能的 ffmpeg 二进制文件设置的默认路径。

        【讨论】:

        • 谢谢。你能演示我如何评估 PHP 中 exec() 命令的返回吗?如果命令不起作用,PHP 是否足够聪明以返回 false?这会让我感到惊讶。
        • 示例:if (strpos(ffmpeg --help, 'ffmpeg') > -1) echo 'Installed!';
        • @Cd-MaN: 除非转成输出类似The package ffmpeg is not installed, you can install it by running...。此外,strpos 不能用作 Javascript 等效项,您必须针对 !== false 进行测试。
        【解决方案4】:

        嗨,我搜索了这个问题,我可以通过以下代码获取 ffmpeg 的版本: echo(shell_exec('/usr/bin/ffmpeg -version'));

        【讨论】:

          【解决方案5】:

          你可以试试这个:

          function commandExists($command) {
              $command = escapeshellarg($command);
              $exists = exec("man ".$command,$out);
              return sizeof($out);
          }
          
          if (commandExists("ffmpeg")>0) {
             // FFMPeg Exists on server
          } else {
             // No FFMPeg
          }
          

          也可重复用于其他功能 - 不确定安全问题。

          【讨论】:

          • 这是检查命令的一种非常糟糕的方法。已安装的手册页并不意味着程序已安装 - 反之亦然。检查可执行文件本身就足够了。
          • 公平地说,这是我想到的第一个想法并在我测试它的服务器上工作,我想我会看看它是否也适用于 OP。
          猜你喜欢
          • 1970-01-01
          • 2010-10-25
          • 1970-01-01
          • 2011-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-16
          相关资源
          最近更新 更多