如果是php7的话就别看了,暂时还没支持php7.最多支持到php5.6。
把项目脚本中报错的一行注释掉,引起的原因貌似是php7重写了一些东西,这里通不过了。注释掉那个报错脚本里报错的行,目前暂时没有出现问题。
环境为centos7,一顿yum安装。先装上repo源,目前ffmpeg的软件版本为2.6.8
ffmpeg是软件,ffmpeg-php是php的扩展
sudo rpm –import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
然后开始安装软件和扩展工具
yum install ffmpeg ffmpeg-devel ffmpeg-php -y
安装完后下载ffmpeg-php扩展,目前有几种方法,直接下载包,解压,或者用git克隆文件。目前最新扩展版本是0.6.以下是文件地址,推荐使用git
git clone https://github.com/tony2001/ffmpeg-php.git
进入下载的文件夹,然后通过phpize安装扩展
cd ffmpeg-php
phpize
./configure
make
make install
安装过程中可能遇到的问题
1. configure: error: ffmpeg headers not found. Make sure ffmpeg is compiled as shared libraries using the –enable-shared option
解决方法:确认安装了ffmpeg-devel,然后把ffmpeg软件的include路径下的文件复制到/usr/incelude/
不知道软件的incelude路径可以在命令行输入 ffmpeg 来看 config。里边有。复制命令如下
cp -r /usr/include/ffmpeg/* /usr/include/
如果还有报错,可能需要加上php的安装路径,我的是宝塔安装的PHP,所以路径如下:
./configure --with-php-config=/www/server/php/56/bin/php-config
继续
make
make install
安装完在php.ini加入ffmpeg.so
extension=ffmpeg.so
重启php-fpm即可。我的是宝塔面板,所以直接在宝塔商店重启PHP即可。
//获得视频文件的缩略图
function getVideoCover($file,$time,$name) {
if(empty($time))$time = '1';//默认截取第一秒第一帧
$strlen = strlen($file);
// $videoCover = substr($file,0,$strlen-4);
// $videoCoverName = $videoCover.'.jpg';//缩略图命名
//exec("ffmpeg -i ".$file." -y -f mjpeg -ss ".$time." -t 0.001 -s 320x240 ".$name."",$out,$status);
$str = "ffmpeg -i ".$file." -y -f mjpeg -ss 3 -t ".$time." -s 320x240 ".$name;
//echo $str."";
$result = system($str);
}
//获得视频文件的总长度时间和创建时间
function getTime($file){
$vtime = exec("ffmpeg -i ".$file." 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//");//总长度
$ctime = date("Y-m-d H:i:s",filectime($file));//创建时间
//$duration = explode(":",$time);
// $duration_in_seconds = $duration[0]*3600 + $duration[1]*60+ round($duration[2]);//转化为秒
return array('vtime'=>$vtime,
'ctime'=>$ctime
);
}
附thinkphp5的控制器源码
';
$this->img($video_path, 1, '300x200');
continue;
}
}
}
function img($video_path, $time=1, $wh='')
{
// $video_path = '/www/wwwroot/m1.a.com/uploads/teshe/1.mp4';
for ($i=$time; $i<=$time; $i+=5)
{
$this->getVideoCover($video_path, $i, $wh);
}
}
/**
* @param $video_path 视频文件路径
* @param string $wh 宽和高 320x240
* @param int $time 截取第几秒(帧)
* @param string $image_path 截图的保存路径
* @return bool|string
*/
function getVideoCover($video_path, $time=1, $wh='',$image_path='',$img_name = '') {
$video_pathinfo = pathinfo($video_path);
if(!$time) $time = '1';//默认截取第一秒第一帧
if(!$image_path) $image_path = $video_pathinfo['dirname'].'/';//默认保存文件名
if(!$img_name)
{
$img_name = $video_pathinfo['filename'].'_'.$time;
}
if($wh)
{
$img_name .= '_'.$wh;
}
$img_name .= '.jpg';
$image_path .= $img_name;
//exec("ffmpeg -i ".$video_path." -y -f mjpeg -ss ".$time." -t 0.001 -s 320x240 ".$image_path."",$out,$status);
$str = "ffmpeg -i ".$video_path." -y -f mjpeg -ss 3 -t ".$time." ";
if($wh) $str .= " -s ".$wh." ";
$str .= $image_path;
echo $str.'
';
$result = system($str);
return $result;
//生成图片:linux直接运行该命令,或php exec()
//ffmpeg -ss 00:00:31 -i ./1.mp4 ./31.jpg -r 1 -vframes 1 -an -f mjpeg 1>/dev/null
//时长:
//ffmpeg -i ./1.mp4 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//
}
}