• 获得视频时间总长度的另一种方法


    本人之前写过一篇:

    利用Ffmpeg获得flv视频缩略图和视频时间

    当时获得视频长度是采用网上的通用的获得flv视频文件长度的方法,但是这个方法只对flv视频支持,其他格式的视频获取到的值就很差了,

    下面在介绍一种:利用ffmpeg返回值Duration的方法,原来也想过用,但是没有解决,现在可以了,由于ffmpeg支持很多种格式的视频,所以这个具体一定的通用性。

    ffmpeg获得视频时间长度的Duration的linux命令:

    ffmpeg -i test.flv 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//

    可以获得Duration;看下图

    wps_clip_image-9458

    命令分析:

    grep命令:匹配查找文件里符合条件的字符串,这里查找Duration字段

    cut:以空格为分割符,查询第四个元素,cut是很好的切割命令

    下面附几个cut的实例:

    #ffmpeg -i test.flv

    输入下面信息:

    wps_clip_image-19473

    ①获得creationdate:文件创建时间

    ffmpeg -i test.flv 2>&1 | grep 'creationdate' | cut -d ' ' -f  5-

    说明:Cut是文本截取命令:以空格作为分隔符,截取第5位以后的字段,

    wps_clip_image-19643

    如果想要截取: 第5个元素和第8个元素,应该这样写:

    ffmpeg -i test.flv 2>&1 | grep 'creationdate' | cut -d ' ' -f  5,8

    ②获得视频尺寸大小

    使用cut截取以空格为分隔符的第十个元素也是视频尺寸

    ffmpeg -i test.flv 2>&1 | grep 'Video' | cut -d ' ' -f 10 | sed s/,//

    wps_clip_image-25127

    sed命令:sed ‘s/要替换的字符串/新字符串/g’

    例如:sed s/,//:表示:用空白符替换','号

    下面是利用获得视频缩略图和视频总长度时间的代码:

    <?php 
    /*
    * 获得视频文件的缩略图和视频长度
    *需要ffmpeg支持
    * @author PHP淮北
    * @date 2011-09-14
    * @copyright PHP淮北
    */
    
    //获得视频文件的总长度时间和创建时间
    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
        			);
    
    }
    //获得视频文件的缩略图
    function getVideoCover($file,$time) {
    		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 ".$videoCoverName."",$out,$status);
    
    		if($status == 0)return $videoCoverName;
    		elseif ($status == 1)return FALSE;
    	}
    
    
    //调用方法
    $duration = getTime('/usr/local/apache/htdocs/test.flv');
    echo $duration['vtime'].'<br/>';//总长度
    echo $duration['ctime'].'<br/>';//创建时间
    
    $videoCoverName = getVideoCover('/usr/local/apache/htdocs/test.flv', 6);
    echo $videoCoverName;//获得缩略图名称
    
    ?>
    

      

    测试效果

    wps_clip_image-21485

    视频长度是:55秒43

    视频创建时间;2011-9-13

    视频缩略图:test.jpg

    -----------------------------测试完全ok

    补充:如果想获得视频文件的大小可以使用:

    filesize()

    filesize() 函数用于取得文件大小默认单位是:bytes,成功返回文件大小的字节数,否则返回 FALSE 。

    语法:

    知识共享许可协议本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名:PHP10086博客网(PHP淮北):http://www.php10086.com,也可以邮件与我联系

  • 相关阅读:
    解决mysqldump: Got error: 1044: Access denied for user
    Ubuntu技巧之 is not in the sudoers file解决方法
    mysql日志详细解析
    linux利用grep查看打印匹配的下几行或前后几行的命令
    Linux无法使用userdel删除用户和组的解决办法
    ubuntu快速清理磁盘垃圾
    smarty中math函数的用法
    metinfo首页内容简介
    linux命令别名的使用
    mysql 导出表结构和表数据 mysqldump用法
  • 原文地址:https://www.cnblogs.com/phphuaibei/p/2175550.html
Copyright © 2020-2023  润新知