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."</br>";
     $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的控制器源码

<?php
namespace app\mingpc\controller;

use think\Db;
use think\Session;
use think\Controller;
use think\Log;
use think\Cache;

//执行url:     http://www.a.com/video/img_all/
class Video extends Controller
{

    function img_all()
    {
        $video_all     = '/www/wwwroot/m1.a.com/uploads/teshe/';
        $video_ary  = scandir($video_all);
        foreach ($video_ary as $video)
        {
            if(strstr($video, ".mp4") !== FALSE)
            {
                $video_path     = $video_all.$video;
                echo $video_path.'<br>';
                $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.'<br>';
        $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/,//

    }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值