【问题标题】:Why does FFMPEG work in terminal but not in php with exec()?为什么 FFMPEG 可以在终端中工作,但不能在带有 exec() 的 php 中工作?
【发布时间】:2011-06-06 01:56:52
【问题描述】:

我正在尝试让 FFMPEG 在 php 中工作。我刚刚安装了 ffmpeg 和 x264 并在我的终端中运行了以下命令:

$command = 'ffmpeg -i /home/gman/Desktop/cave.wmv -acodec libfaac -aq 100 -vcodec libx264 -preset slow -crf 22 -threads 0 /home/gman/Desktop/newvideo.flv

它运行良好,并从初始视频创建了一个新的 flv 视频,就像我想要的那样。

现在当我在 php 中尝试同样的事情时,什么也没有发生......

$safe_path = escapeshellarg("/home/gman/Desktop/newvideo.flv");
$command = 'ffmpeg -i /home/gman/Desktop/cave.wmv -acodec libfaac -aq 100 -vcodec libx264 -preset slow -crf 22 -threads 0 ' . $safe_path;
exec($command);

有人有什么想法吗?我能以某种方式看到 exec 在做什么并看到某种输出吗?会很感激的。

【问题讨论】:

  • 您可以将变量作为第二个参数传递给exec(),并将输出分配给它。
  • 使用php.net/shell_exec 代替以字符串形式返回输出。
  • Alex 和 Brad 说了什么,然后回来发布结果,以便我们提供帮助! :)
  • 如果这是一个 shell 脚本,那么system() 是另一个不错的选择,它可以将所有输出直接打印到标准输出而无需任何额外的努力。
  • 不,没有错误对话,我试了shell_exec,像这样,一无所获 $command = shell_exec('ffmpeg -i /home/geoff/Desktop/cave.wmv -acodec libfaac -aq 100 -vcodec libx264 -preset slow -crf 22 -threads 0 ' . $safe_path);回声 $command;

标签: php linux ffmpeg


【解决方案1】:

通常当您在 exec 中调用 ffmpeg 时,您需要输入 ffmpeg 的绝对路径,例如:

$safe_path = escapeshellarg("/home/gman/Desktop/newvideo.flv");
$command = '/usr/local/bin/ffmpeg -i /home/gman/Desktop/cave.wmv -acodec libfaac -aq 100 -vcodec libx264 -preset slow -crf 22 -threads 0 ' . $safe_path;
exec($command);

【讨论】:

  • 另一个因素可能是您正在写入的文件夹的权限。确保您拥有正确的写入权限。
  • 我也这么认为,但我只是在终端中运行了相同的命令,它写入桌面就好了
  • 这取决于您如何通过 php 运行命令。如果您通过 apache 运行它,并且它没有写入该文件夹的权限,它将失败。如果在终端中运行命令时,您是桌面的所有者,那么它将运行良好。
  • 如何判断apache是​​否有权限?
  • 当你在 /home/gman/ 中“ls -l”时,桌面旁边会说什么?
【解决方案2】:

http://blog.codyjung.com/2011/05/29/problems-with-lampp-and-exec/

我的解决方案是简单地从 /usr/lib/i386-linux-gnu 复制那些并覆盖 LAMPP 的。以后会不会出问题?也许吧,但我想我们会在它出现时处理它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2013-04-09
    • 2021-12-18
    • 1970-01-01
    • 2015-09-29
    相关资源
    最近更新 更多