如何在带有 XAMPP 的 Mac 上使用 PHP 运行 ffmpeg

Posted

技术标签:

【中文标题】如何在带有 XAMPP 的 Mac 上使用 PHP 运行 ffmpeg【英文标题】:How do I run ffmpeg with PHP on a Mac with XAMPP 【发布时间】:2017-09-03 10:45:54 【问题描述】:

实际上在任何地方都没有任何内容,没有什么是行不通的,对我来说太先进了。如果你能回答这个问题,你就会成为我的生命。如何从本地主机上运行的 php 运行 ffmpeg 命令?我更喜欢 XAMPP,但 MAMP 就可以了,在这个阶段我会使用任何东西。我需要在XAMPP服务器本身上安装ffmpeg,还是只需要在mac上安装?我可以从终端很好地运行 ffmpeg 命令,例如,

ffmpeg -i Tmpfile.mp4 -c:v libx264 -preset ultrafast video.mp4

工作正常,但是

echo shell_exec("ffmpeg -i Tmpfile.mp4 -c:v libx264 -preset ultrafast video.mp4");

当我使用该代码所在的 index.php 加载网页时,什么都不做。

如果你能解决我的问题,我会给你买一块饼干 :)

【问题讨论】:

您的 PHP 错误日志显示什么? 您的文件路径是否正确?它们是否与您的 PHP 脚本位于同一目录中? /usr/local/Cellar/ffmpeg/3.2.4/bin/ffmpeg' 是 homebrew 安装的 ffmpeg 文件的路径。只有一个文件,不像windows xampp教程有很多文件。单击该文件会打开一个终端窗口。该路径是我在我的 php 脚本中链接到的路径。我将它保存为 $ffmpeg 变量,然后 echo shell_exec("ffmpeg -i Tmpfile.mp4 -c:v libx264 -preset ultrafast video.mp4");尝试运行它。我将尝试在与脚本本身相同的目录中使用它。 @LordNeckbeard 当我尝试链接到我的系统(不是 xampp)上 ffmpeg 所在的路径时,这里有一条错误消息:找不到符号:__cg_jpeg_resync_to_restart 引用自:/System/Library/Frameworks/ImageIO .framework/Versions/A/ImageIO 预期在:/Applications/XAMPP/xamppfiles/lib/libJPEG.dylib 在 /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO 错误只是尝试在没有路径的情况下执行 ffmpeg 命令(包括与 php 脚本位于同一目录中的文件),是 ffmpeg: command not found 【参考方案1】:

您在描述问题时应该更加具体,例如包括OSX版本、ffmpeg版本等

我成功地重现了你的情况,这是程序:

1。 ffmpeg

我通过brew 安装了ffmpeg。 ffmpeg 版本目前是 3.2.4。

2。 PHP服务器

在 macOS Sierra(但其他早期版本也提供此功能)上,您只需键入即可启动 PHP 服务器

$ php -S 0.0.0.0:8080

在你的外壳中。在这种情况下,Web 服务器将侦听端口 8080。

3。 PHP 脚本

我基本上使用了您在问题中提供的脚本,稍作修改:

<?php

echo "loading, please wait...";

echo shell_exec("ffmpeg -i temp.mp4 -c:v libx264 -preset ultrafast video.mp4 2>&1");

你注意到2&gt;&amp;1了吗?它用于将sterr 输出重定向到stdoutput,因为ffmpeg 不会在标准输出上打印任何内容:)

4。安全模式?

请务必禁用 PHP 安全模式,因为当安全模式开启 (reference here) 时,shell_exec 方法会被禁用。

【讨论】:

感谢您的回复。我仍然没有真正解决这个问题。我正在使用最新版本的一切(sierra,ffmpeg 3.2.4)。我试过你的方法,它有效!但是 - 我的问题是让它在 XAMPP 或 MAMP(apache 服务器)上工作。我不知道将文件放在 xampp 目录中的什么位置。我应该从脚本链接到 unix 可执行文件(从他们的网站下载的文件,或者从 brew 安装时存储在 /usr/local/Cellar/ffmpeg/3.2.4/bin/ffmpeg' 中)?【参考方案2】:

啊,我找到了答案。我需要将此添加到 php 脚本的开头

    exec('unset DYLD_LIBRARY_PATH ;');
putenv('DYLD_LIBRARY_PATH');
putenv('DYLD_LIBRARY_PATH=/usr/bin');

【讨论】:

我不是 PHP 专家 - 但我想只要上面的最后一行就足够了,没有前两行。

以上是关于如何在带有 XAMPP 的 Mac 上使用 PHP 运行 ffmpeg的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac 上的 XAMPP 上安装 PHP 国际化扩展 (Intl)

如何在Mac上的PHP中从Xampp本地主机发送邮件?

如何在 MAC OS X 10.7 Lion 上安装多个 XAMPP 版本或多个 PHP 版本

如何使用本地 xampp 和 php 联系人表单从我的 mac 发送邮件

表单到电子邮件 - Xampp、PHP、Javascript、MAC OS

在 Mac OS Lion 上使用 XAMPP 安装 MongoDb PHP 驱动程序时出错