资讯专栏INFORMATION COLUMN

FFMPEG获取视频播放时长

enrecul101 / 1295人阅读

摘要:原文链接获取视频播放时长今天做一个视频管理系统的时候,客户要求一个视频截取张缩略图。那么就涉及到如何去获取视频长度的问题。查找相关资料,最终封装了如下方法,不仅可以获取视频时长,还可以获取分辨率编码比特率等信息。

原文链接:http://www.fire-rain.com/blog/FFMPEG_VIDEO_TIME

FFMPEG获取视频播放时长

今天做一个视频管理系统的时候,客户要求一个视频截取20张缩略图。并且按照视频长度截取20个不同时间点。那么就涉及到如何去获取视频长度的问题。查找相关资料,最终封装了如下方法,不仅可以获取视频时长,还可以获取分辨率、编码、比特率等信息。

调用示例
&1", $file));
    $info = ob_get_contents();
    ob_end_clean();
  // 通过使用输出缓冲,获取到ffmpeg所有输出的内容。
   $ret = array();
    // Duration: 01:24:12.73, start: 0.000000, bitrate: 456 kb/s
    if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (d*) kb/s/", $info, $match)) {
        $ret["duration"] = $match[1]; // 提取出播放时间
        $da = explode(":", $match[1]); 
        $ret["seconds"] = $da[0] * 3600 + $da[1] * 60 + $da[2]; // 转换为秒
        $ret["start"] = $match[2]; // 开始时间
        $ret["bitrate"] = $match[3]; // bitrate 码率 单位 kb
    }

    // Stream #0.1: Video: rv40, yuv420p, 512x384, 355 kb/s, 12.05 fps, 12 tbr, 1k tbn, 12 tbc
    if (preg_match("/Video: (.*?), (.*?), (.*?)[,s]/", $info, $match)) {
        $ret["vcodec"] = $match[1]; // 编码格式
        $ret["vformat"] = $match[2]; // 视频格式 
        $ret["resolution"] = $match[3]; // 分辨率
        $a = explode("x", $match[3]);
        $ret["width"] = $a[0];
        $ret["height"] = $a[1];
    }

    // Stream #0.0: Audio: cook, 44100 Hz, stereo, s16, 96 kb/s
    if (preg_match("/Audio: (w*), (d*) Hz/", $info, $match)) {
        $ret["acodec"] = $match[1];       // 音频编码
        $ret["asamplerate"] = $match[2];  // 音频采样频率
    }

    if (isset($ret["seconds"]) && isset($ret["start"])) {
        $ret["play_time"] = $ret["seconds"] + $ret["start"]; // 实际播放时间
    }

    $ret["size"] = filesize($file); // 文件大小
    return $ret;
}

// 调用方法:
 print_r( video_info("test.mp4","ffmpeg.exe"));

返回结果

Array ( [duration] => 00:00:30.13 [seconds] => 30.13 [start] => 0.036281 [bitrate] => 5495 [vcodec] => h264 (High) (avc1 / 0x31637661) [vformat]     => yuv420p [resolution] => 1280x720 [width] => 1280 [height] => 720 [play_time] => 30.166281 [size] => 20695855 )

注意需要在php.ini文件上把passthru函数的权限打开,否则会报错!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20839.html

相关文章

  • 也谈 “FFMPEG获取视频播放时长

    摘要:背景因为工作中有部分内容是使用来获取音视频信息以及对音视频文件进行处理,遇到了一些问题,所以一路搜过来。因为视频处理必然离不开,网上抄了一段是领先的多媒体框架。 背景: 因为工作中有部分内容是使用PHP来获取音/视频信息以及对音视频文件进行处理,遇到了一些问题,所以一路搜过来。 FFmpeg 因为视频处理必然离不开FFmpeg,网上抄了一段: FFmpeg是领先的多媒体框架。 在这个框...

    BingqiChen 评论0 收藏0
  • 在线短视频秒播优化之视频文件格式之MP4文件Moov box的位置

    摘要:之前我们介绍了在线短视频秒播优化的方方面面,从服务器,部署接入,数据连接获取,客户端缓存,出帧策略,到视频文件帧位置等。并不是文件必须的部分,但在我们常见的可在线播放的格式文件中例如中的文件确是重中之重。 showImg(https://segmentfault.com/img/bV0wbG?w=826&h=358);之前我们介绍了在线短视频秒播优化的方方面面,从服务器,cdn部署接入...

    siberiawolf 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<