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