php安装ffmpeg-php扩展php视频截图视频处理获取视频时长

如果是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/,// } }

 

你可能感兴趣的:(myphp)