1

当谈到 PHP 时,我有点初学者,我正在尝试创建一个简单的(ish)系统,在其中输入文件,然后转换为各种分辨率的 html5 视频。

我已经整理出如何处理多个文件上传等,但现在我遇到了问题。

我似乎无法让 exec 在 PHP 中执行 FFMPEG。

例如,如果我在命令行(Mac OSX 10.8 上的终端)中键入它,它会正确转换视频:

ffmpeg -i /Users/charlieryan/Desktop/MOV01785.MPG websample.mov

这会正确地将转换后的视频文件输出到我的主目录中。

但是,如果我在 PHP 中运行它,如下所示:

exec('ffmpeg -i /Users/charlieryan/Desktop/MOV01785.MPG websample.mov');

绝对没有任何反应……我的统计监视器没有记录处理器使用的任何变化,而且我在系统上的任何地方都找不到输出文件。

由于我在这方面有点菜鸟,我假设我做错了什么,但它是什么?

谢谢,

查理

4

5 回答 5

2

birgire的大量帮助和大量摆弄之后,我已经对其进行了排序。

此问题来自与 MAMP 沙箱的不兼容。可以通过以下方式解决:

转到终端并输入:

sudo nano /Applications/MAMP/Library/bin/envvars

然后用井号 (#) 注释掉以下行

# DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
# export DYLD_LIBRARY_PATH

然后将以下行添加到文件中

export PATH="$PATH:/opt/local/bin"

然后,返回 MAMP 并重新启动服务器,导航回页面,一切顺利。

于 2013-03-03T20:05:29.900 回答
1

您应该首先尝试查看是否exec()允许:

<?php echo exec('echo "exec() is working"');?>

如果它有效,你应该得到

exec() is working

如果它有效,你应该尝试

exec('/full/path/to/ffmpeg -i /Users/charlieryan/Desktop/MOV01785.MPG websample.mov');
于 2013-03-03T14:20:17.903 回答
1

我有同样的问题,如果你使用 MAMP,问题是因为 mamp 的 php 找不到正确的库,我不知道为什么!,所以..这里是诀窍。- 您应该使用系统的 php 来执行将调用 ffmpeg 的 php

在您的 php 代码中(例如:lib.php | index.php):

function callToSysPHP ($videoName) {
    // $cmd = '/path to php/php <your php script> args';
    // In my case 
    $cmd = '/usr/bin/php myffmpeg.php ' . $videoName; 
    shell_exec($cmd);
}

在 myffmpeg.php 中:

 $videoName = $argv[1];
 //$cmd = 'path to your ffmpeg/your ffmpeg command';
 // In my case my ffmpeg cmd looks like
 $cmd =  '/usr/sbin/' . 'ffmpeg -f image2 -framerate 25 -i ./files/pngs/%1d.png -vf scale=480:640 -vcodec libx264 -refs 16 -preset ultrafast ./files/pngs/'. $videoName .'.mp4 2>&1';
 echo '<pre>'; print_r(shell_exec($cmd)); echo '</pre>';

基本上从你的mamp php,调用一个系统php来执行一个php文件,它通过shell_exec()调用一个ffmpeg;

我希望这可以帮助你。

于 2015-12-04T14:42:57.947 回答
0

你在windows机器上安装了ffmpeg吗?如果您在没有 php 的情况下从命令行运行相同的命令会发生什么,它有效吗?如果没有,它与 PHP 没有任何关系。

于 2013-03-03T14:15:39.467 回答
0

如果“ /usr/local/bin/ ”是您可以找到 ffmepg 可执行文件的目录,请尝试以下操作:

<?php
$cmd = 'PATH="/usr/local/bin/"; ffmpeg -i /your/file/destination/batman.mp4 2>&1';
echo "<pre>".shell_exec($cmd)."</pre>";
?>
于 2016-03-15T21:40:04.243 回答