簡體   English   中英

sh:ffmpeg:通過php運行命令時找不到命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM