我不知道为什么首先这里是错误
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
。解决此问题的简单方法是将您的apache
或httpd
用户添加到这些组:
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 可能无法执行它,因为它是由其他用户运行的,正如@Ярослав Рахматуллин 很好地解释的那样。