ffmpeg 在 SSH 时工作,但在 PHP 执行时不工作

ffmpeg 在 SSH 时工作,但在 PHP 执行时不工作

我不知道为什么首先这里是错误

Array ( [0] => ffmpeg: error while loading shared libraries: libvpx.so.1: failed to map segment from shared object: Permission denied ) 

我的 PHP

exec('ffmpeg -i /home/social/public_html/'.$key['upload_path'].' -threads 0  /home/social/public_html/'.$key['path'].$key['filename'].'.webm 2>&1',$out);

我也试过

exec('/usr/bin/ffmpeg -i /home/social/public_html/'.$key['upload_path'].' -threads 0  /home/social/public_html/'.$key['path'].$key['filename'].'.webm 2>&1',$out);

现在,当我通过 ssh 进入服务器并运行相同的命令时,它可以正常工作。

这是我的 FFMPEG

ffmpeg-1.0/ffmpeg
ffmpeg version 1.0 Copyright (c) 2000-2012 the FFmpeg developers
  built on Oct 22 2012 19:38:33 with gcc 4.4.6 (GCC) 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-gpl --enable-postproc --enable-nonfree
  libavutil      51. 73.101 / 51. 73.101
  libavcodec     54. 59.100 / 54. 59.100
  libavformat    54. 29.104 / 54. 29.104
  libavdevice    54.  2.101 / 54.  2.101
  libavfilter     3. 17.100 /  3. 17.100
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

我想知道是否有其他人遇到此错误

答案1

我假设您正在尝试通过 Web 服务器运行该命令。因为如果您已通过php ffmpeg-invocation-script.php以“您自己”的身份运行来验证 php-command-invocation 是否有效,则最有可能的错误原因是用户权限错误。

您的 Web 服务器(apache?)以与您登录时不同的用户身份运行。通常将视频和音频设备的访问权限限制为属于组video和的用户audio。解决此问题的简单方法是将您的apachehttpd用户添加到这些组:

usermod -a -G video apache

要确定你的 Apache 以谁的身份运行,请使用以下命令:

ps aux |grep [a]pache |tail -n1 | awk '{print $1}'

要列出系统上的所有组,请使用(查找音频和视频):

getent  group | sort | awk -F: '{print $1}'

除此之外,您可能会在从 PHP 运行 ffmped 时遇到麻烦,因为 PHP 脚本通常被限制运行时间不超过给定时间(30 秒左右)。您可以在 apache-php 配置中编辑此参数。在我的系统上,此参数位于此处:

$ grep -Hn max_exec /etc/php/apache2-php5.3/php.ini
/etc/php/apache2-php5.3/php.ini:444:max_execution_time = 30

还有内存限制。您可以在与 max_execution_time 参数相同的部分中找到该参数。

答案2

我遇到过类似的问题,Yaroslav 的回答对我解决这个问题有很大帮助。我碰巧使用“root”用户将 ffmpeg 安装到 $HOME ('/root/'),方法是http://trac.ffmpeg.org/wiki/CompilationGuide/Centos,导致 ffpmeg 未与 PHP 用户共享。我按照相同的指南重新安装解决了这个问题,但将“$HOME”更改为“/usr/local”,即安装在共享路径中。“神奇的是”PHP 现在也可以执行它了。

您的错误”ffmpeg:加载共享库时出错:libvpx.so.1:无法从共享对象映射段:权限被拒绝“对我来说似乎非常相似。我猜你的 libvpx 可能只使用 root 权限安装。虽然你可以在 SSH 终端中成功执行命令,但 PHP 可能无法执行它,因为它是由其他用户运行的,正如@Ярослав Рахматуллин 很好地解释的那样。

相关内容