ffmpeg直接获取视频信息+视频截图+大小+时间

/*
 * ffmpeg直接获取视频信息
 *
 * */
//获取视频信息
function get_videoInfo($video_file){
    ob_start(); // 使用输出缓冲,获取ffmpeg所有输出内容
    $str="ffprobe -v quiet -print_format json -show_format -show_streams ".$video_file;
    system($str);
    $jsonData=json_decode(ob_get_contents(),true);
    ob_end_clean(); // 使用输出缓冲,清除ffmpeg所有输出内容
    $res=[];

    $streams=$jsonData['streams'][1];
    $res['width']=$streams['width'];                     //宽度
    $res['height']=$streams['height'];                   //长度
    $res['duration']=$streams['duration'];              //获取视频长度
    $res['tagsCount']=count($streams['tags']);                  //获取数量
    $format=$jsonData['format'];
    $res['videoSize']=sprintf( "%.1f ",($format['size']/1024/1000))."MB";     //获取视频大小
    if($res['tagsCount']==4){
        $res['rotate']=$streams['tags']['rotate'];
        $res['imgUrl']=getVideoCover($video_file, '', $res['width'], $res['height']);

    }else{
        $res['rotate']="";
        $res['imgUrl']=getVideoCover($video_file, '', $res['height'], $res['width']);
    }
    return $res;

}

/*
 * 获得视频文件的缩略图
 * @file 视频地址
 * ,url 缩略图地址
 * */

function getVideoCover($file, $time,$width=0,$height=0)
{

    $sveFile=ROOT_PATH . 'public' . DS . 'uploads'. DS.'videoImg/' ;
    $name=time().mt_rand(0,99).".png";

    $time=$time?$time:'2';//默认截取第一秒第一帧

    //   $str=exec("/usr/local/ffmpeg/bin/ffmpeg  -ss 10 -i ".$file." 2>&1 -y -f mjpeg  -vframes 1 -s 352x240 ".$_SERVER['DOCUMENT_ROOT']."/MVC/include/img/b-%03d.jpg",$out,$status);
 //     ffmpeg -ss 5 -i http://www.***.com/intangibleApp/mp4/2018-01-08-56.mp4 -vf rotate=0 -y -f mjpeg  -vframes 1 -s 1242*699 /home/test/你的项目/public/uploads/videoImg/%3d.png

//    $str= "ffmpeg -ss ".$time." -i ".$file."   -y -f mjpeg  -vframes 1 -s ".$width."*".$height.$sveFile.$name;
    $str= "ffmpeg -ss ".$time." -i ".$file."  -y -f mjpeg  -vframes 1 -s ".$height."*".$width."  ".$sveFile.$name;

    $result = system($str);

    $saveUrl=$sveFile.$name;


    if($_SERVER['HTTP_HOST']=="www.***.com"){
        $fileUrl="feiyiproject/videoImg/";       //正式地址图片路径
    }else{
        $fileUrl="intangibleApp/videoImg/";       //测试地址路径
    }
    vendor('aliyun.autoload');
    $accessKeyId = "*******";//去阿里云后台获取秘钥
    $accessKeySecret = "********";//去阿里云后台获取秘钥
    $endpoint = "oss-cn-shenzhen.aliyuncs.com";//你的阿里云OSS地址
    $ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);
    $bucket = "阿里云oss空间";//oss中的文件上传空间
    $object = $fileUrl . $name;//想要保存文件的名称
    $fname = 'http://image.***.com/' . ltrim($object, './');

    try {
        $ossClient->uploadFile($bucket, $object, $saveUrl);
        if(file_exists($saveUrl)){
            unlink($saveUrl);
        }
    } catch (OssException $e) {
        printf($e->getMessage() . "\n");
        return;
    }
    return $fname;

}

//获取视频大小

function getVideoSize($video){

    $size=sprintf( "%.1f ",($video['size']/1024/1000))."MB";

    return $size;

}

//获得视频文件的总长度时间和创建时间

function getVideoTime($file)

{

    $vtime = exec("ffmpeg -i " . $file . "  2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//");//CuPlayer.com 总长度

//        $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]);//CuPlayer.com 转化为秒

    return $vtime;
}
分享到: