sh:ffmpeg:通过php运行命令时找不到命令

时间:2015-04-09 04:07:43

标签: php ffmpeg centos6

我已在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

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:2)

对于视频缩略图创建,我们使用ffmpeg。

在Linux Systems(centos 6.x)中,Ffmpeg安装过程和Php示例: -

此过程在我的centos 6中完成,并使用php创建缩略图。

Step1: - 请检查您的Linux服务器中是否有现有的ffmpeg。如果可用,请删除该文件。

Step2: - 对于新的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);
?>

希望这对你有帮助其他..

答案 1 :(得分:0)

尝试使用which找到ffmpeg二进制文件。至少在基于Ubuntu / Debian的Linux上,默认情况下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脚本运行错误的可执行文件)。

答案 2 :(得分:0)

我已经看到了这个问题。对我来说,“找不到命令”可能是./emmaHQbanner.jpg变量问题。

通过php并使用srcset$PATH php函数运行此命令时,与Linux目录中的运行命令相比,您可以使用其他shell_exec()变量。

例如,我的php项目的exec()如下:

$PATH

但是/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 目录中。我的Linux的ffmpeg变量包含/data/bin

因此,在上面的$PATH变量中添加/data/bin可以解决问题。

相关问题