Thinkphp5.1 FFmpeg 获取mp4视频的第一帧图片和视频的时长

Thinkphp FFmpeg 获取mp4视频的第一帧图片和视频的时长!

最近做一个项目,上传的视频要获取视频的第一帧图片和视频的时长!

从网上找了好多资料,终于成功了,下面给大家分享一下!主要用到FFmpeg。

安装Nux Dextop Yum 源

由于CentOS没有官方FFmpeg rpm软件包。但是,我们可以使用第三方YUM源(Nux Dextop)完成此工作。

CentOS 7

    rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
    rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

CentOS 6

    rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
    rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm

安装FFmpeg 和 FFmpeg开发包

    yum install ffmpeg ffmpeg-devel -y

测试是否安装成功

ffmpeg

上面只是把基础打好,下面开始上程序

获取视频的第一帧图片centos命令

    ffmpeg -i /www/wwwroot/demo.lepinlive.cn/public/uploads/23123213.mp4  -y -f image2 -ss 2 -t 0.001 -s 280x240 /www/wwwroot/demo.lepinlive.cn/publichttp://img.lepinlive.cn/uploads/images/20211219/1639905203.jpg

ffmpeg -i 视频路径  -y -f image2 -ss 2 -t 0.001 -s 280x240 生成图片地址

开始上thinkphp程序

获得视频文件的具体信息

        public function getContent($file)
        {
            $ffmpeg_url = 'ffmpeg -i "%s" 2>&1';
            /$file为视频上传目录 
            $command = sprintf($ffmpeg_url, $file);//你的安装路径
            ob_start();
            passthru($command);
            $info = ob_get_contents();
            ob_end_clean();
            $data = array();
            if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (d*) kb/s/", $info, $match)) {
                $arr_duration = explode(':', $match[1]);
                $data['seconds'] = $arr_duration[0] * 3600 + $arr_duration[1] * 60 + $arr_duration[2]; //转换播放时间为秒数
                $data['start'] = $match[2]; //开始时间
                $data['bitrate'] = $match[3]; //码率(kb)
            }
            if (preg_match("/Video: (.*?), (.*?), (.*?)[,s]/", $info, $match)) {
     
                $data['vcodec'] = $match[1]; //视频编码格式
                $data['vformat'] = $match[2]; //视频格式
                $data['resolution'] = $match[3]; //视频分辨率
                $arr_resolution = explode('x', $match[3]);
                $data['width'] = $arr_resolution[0];
    //            $data['height'] = $arr_resolution[1];
            }
            if (preg_match("/Audio: (w*), (d*) Hz/", $info, $match)) {
                $data['acodec'] = $match[1]; //音频编码
                $data['asamplerate'] = $match[2]; //音频采样频率
            }
            if (isset($data['seconds']) && isset($data['start'])) {
                $data['play_time'] = $data['seconds'] + $data['start']; //实际播放时间
            }
            $data['size'] = filesize($file); //文件大小
            //return json($data);
            return $data['seconds'];
        }

调用

   public function video(){
        $pic_name = time().".jpg";
        $root_path = dirname(realpath($app_path)) . "/";
        $imageurl = 'http://img.lepinlive.cn/uploads/images/'.date("Ymd").'/';
        $path = $root_path . 'publichttp://img.lepinlive.cn/uploads/images/'.date("Ymd").'/';
        if (!is_dir(dirname($path))) {
            mkdir(dirname($path), 0755);
        }
        if (!is_dir($path)) {
            mkdir($path, 0755);
        }
        $path = $root_path . 'publichttp://img.lepinlive.cn/uploads/images/'.date("Ymd").'/'.$pic_name;        
        echo $path."<br>";
        $vediourl = $root_path."public/uploads/23123213.mp4";
        echo $vediourl."<br>";
        //这个是获取图片
        $command = "ffmpeg -i ".$vediourl."  -y -f image2 -ss 2 -t 0.001 -s 280x240 ".$path;
        echo $command."<br>";
        shell_exec( $command );
        //这个是获取视频时长
        $info = $this->getContent($vediourl);
        dump($info);
    }

转载:http://www.lepinlive.cn/shows/391/47652.htmlicon-default.png?t=LBL2http://www.lepinlive.cn/shows/391/47652.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值