检测 FFmpeg 安装和版本

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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。

以上是关于检测 FFmpeg 安装和版本的主要内容,如果未能解决你的问题,请参考以下文章

最新版本ffmpeg源码安装+vscode开发环境搭建!

FFMPEG--windows安装

sh 在Ubuntu上安装最新版本的ffmpeg

ffmpeg安装教程

ffmpeg的安装

有谁在phpstudy下安装过ffmpeg的php扩展