[英]sh: ffmpeg: command not found when run command through php
我已经在Centos 6机器( https://trac.ffmpeg.org/wiki/CompilationGuide/Centos )的根目录上成功安装了FFMpeg。
我的apache / php工作场所是/ var / www / html
现在,我在/ var / www / html目录中成功在命令下面运行,以从视频文件捕获帧。 它正在捕获帧。
[root@localhost html]# ffmpeg -i video.mpg -an -ss 30 -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg -s 160x100 frame8 2>&1
我想通过php并使用shell_exec()或exec()php函数运行此命令。 我的运行命令的php代码是:
$cmd = "/root/bin/ffmpeg -i /project/app/webroot/videos/video.mpg -ss 00:00:14.435 -f image2 -vframes 1 /project/app/webroot/videothumbnails/example-thumb.jpg";
$locale = 'en_IN.UTF-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);
echo shell_exec($cmd);
当我尝试通过上述php代码运行命令时,出现以下错误:
sh: ffmpeg: command not found
请帮我解决这个问题。
对于创建视频缩略图,我们使用ffmpeg。
在Linux Systems(centos 6.x)Ffmpeg安装过程和Php示例中:-
这个过程在我的centos 6中完成,并使用php创建了缩略图。
步骤1:-请检查Linux服务器中是否有可用的ffmpeg。如果可用,请删除该文件。
步骤2:-对于新的ffmpeg安装,请点击此链接
http://root.uabid.com/compile-ffmpeg-on-centos-6-x/ 。
步骤3:-安装完成后,检查ffmpeg的安装位置。
命令:whereis ffmpeg
在linux命令行中键入此命令并检查。例如,您的ffmpeg路径是否位于(/ usr / local / bin / ffmpeg)中。 在代码中使用此路径。
php范例:-
<?php
if($extension === 'mp4' OR $extension == 'MP4' )
{
$video = $timestamp.$imagename;
$videoname=substr($imagename,0, -4).$timestamp;
$image = "sites/default/files/content_images/{$videoname}-thumb.jpg";
var_dump($video);
$cmd = "/usr/local/bin/ffmpeg -i /opt/lampp/htdocs/myproject/sites/default/files/content_videos/".$video." -ss 00:00:01.435 -f image2 -vframes 1 /opt/lampp/htdocs/myproject/sites/default/files/content_images/".$videoname."- thumb.jpg";
$cmdstr = $cmd;
$locale = 'en_IN.UTF-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);
echo exec($cmd);
?>
流程2:-这适用于静态文件路径:
<?php
$cmd = "/root/bin/ffmpeg -i /var/www/html/project/app/webroot/videos/example.mp4 -ss 00:00:01.435 -f image2 -vframes 1 /var/www/html/project/app/webroot/videothumbnails/example-thumb.jpg";
$cmdstr = $cmd;
$locale = 'en_IN.UTF-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);
echo exec($cmd);
?>
希望这对您和其他人有帮助。
尝试使用which
来定位ffmpeg二进制文件。 至少在基于Ubuntu / Debian的Linux上which
默认情况下应该使用which
命令。 which
文件路径返回到任何可用应用程序的首选可执行文件。 例如which php
应该返回默认用于CLI操作的PHP安装可执行文件。 因此which ffmpeg
应该返回ffmpeg安装的系统默认位置。
<?php
// shell_exec returns the command output or null on error/empty output.
$ffmpeg_path = shell_exec('which ffmpeg');
if ($ffmpeg_path != null) {
shell_exec($ffmpeg_path . ' -i file.mpg --snip--');
}
还要确保运行PHP脚本的Linux用户可以访问ffmpeg(例如$ chmod +x ffmpeg
)。 如果$ sudo which ffmpeg
返回路径, $ which ffmpeg
路径不返回,请尝试为所需用户重新安装ffmpeg或尝试使用权限。
编辑:尽管要小心which
但不知道破解程序是否可以用恶意代码替换ffmpeg可执行文件(这导致上述PHP脚本运行错误的可执行文件)。
我已经看到了这个问题。 对我来说,“找不到命令”可能是$PATH
变量问题。
当通过php并使用shell_exec()
或exec()
php函数运行此命令时,与Linux目录中的running命令相比,可以使用不同的$PATH
变量。
例如,我的php项目的/usr/local/php/etc/vhostphp-fpm.conf
如下:
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
env[LD_LIBRARY_PATH] = /usr/local/lib
但是ffmpeg
命令位于/data/bin
目录中。 我的Linux的$PATH
变量包含/data/bin
。
因此,在上面的env[PATH]
变量中添加/data/bin
可以解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.