使用FFmpeg获取视频信息

   //之前在网上找了很多例子使用ffmpeg获取视频参数,发现正则有问题,加以改良,希望其他人不要被误导
   /** 
     * 广州第一靓仔-Stone
     * 获取视频的分辨率
     * @param $strInfoArray
     * @param string $fileName
     */
    public static function getVideoInfo($file){
        $command = sprintf(self::$FFMPEG_COMMAND, $file);
        ob_start();
        passthru($command);
        $info = ob_get_contents();
        ob_end_clean();
        $returnData = array();
        $array_ = explode("\n", $info);
        foreach ($array_ as $oneLine) {
            if(strstr($oneLine,'Duration:')){
                preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $oneLine, $match);
                $returnData['duration'] = $match[1]; //播放时间
                $arr_duration = explode(':', $match[1]);
                $returnData['seconds'] = $arr_duration[0] * 3600 + $arr_duration[1] * 60 + $arr_duration[2]; //转换播放时间为秒数
                $returnData['start'] = $match[2]; //开始时间
                $returnData['bitrate'] = $match[3]; //码率(kb)
            }
            if(strstr($oneLine,'Video:')){
                //去掉括号,因为里面可能会包含逗号照成后面正则匹配错误
                $oneLine = preg_replace('/\(([^\)]+)\)/','',$oneLine);
                preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $oneLine, $match);
                $returnData['vcodec'] = $match[1]; //视频编码格式
                $returnData['vformat'] = $match[2]; //视频格式
                $returnData['resolution'] = $match[3]; //视频分辨率
                $arr_resolution = explode('x', $match[3]);
                $returnData['width'] = $arr_resolution[0];
                $returnData['height'] = $arr_resolution[1];
            }
            if(strstr($oneLine,'Audio:')){
                //去掉括号,因为里面可能会包含逗号照成后面正则匹配错误
                $oneLine = preg_replace('/\(([^\)]+)\)/','',$oneLine);
                preg_match("/Audio: (\w*), (\d*) Hz/", $oneLine, $match);
                $returnData['acodec'] = $match[1]; //音频编码
                $returnData['asamplerate'] = $match[2]; //音频采样频率
            }
        }
        $returnData['size'] = filesize($file); //文件大小
        return $returnData;

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值