PHP使用FFmpeg获取视频播放总时长与码率等信息


Posted in PHP onSeptember 13, 2016

请注意:这篇文章中会用到passthru,可能部分虚拟主机会将此命令禁用。

代码如下:

PHP

<?php
define('FFMPEG_PATH', '/usr/local/ffmpeg2/bin/ffmpeg -i "%s" 2>&1');
 
function getVideoInfo($file) {
  
  $command = sprintf(FFMPEG_PATH, $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)) {
    $data['duration'] = $match[1]; //播放时间
    $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 $data;
}
 
//用法
$video_info = getVideoInfo('video.mp4');
print_r($video_info);
?>

总结

以上就是这篇文章的全部内容,希望对大家学习或使用PHP的时候能有所帮助。如果有疑问大家可以留言交流。

PHP 相关文章推荐
PHP数据库开发知多少
Oct 09 PHP
PHP4 与 MySQL 交互使用
Oct 09 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
Jan 18 PHP
PHP数据流应用的一个简单实例
Sep 14 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
Jun 14 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
Jul 15 PHP
使用php+swoole对client数据实时更新(一)
Jan 07 PHP
PHP中抽象类、接口的区别与选择分析
Mar 29 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
Oct 28 PHP
PHP用户验证和标签推荐的简单使用
Oct 31 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 PHP
php微信公众平台开发之微信群发信息
Sep 13 #PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 #PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
Sep 11 #PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 #PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 #PHP
PHP入门教程之图像处理技巧分析
Sep 11 #PHP
PHP函数引用返回的实例详解
Sep 11 #PHP
You might like
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
python实现跨文件全局变量的方法
2014/07/07 Python
python将文本转换成图片输出的方法
2015/04/28 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
《大江保卫战》教学反思
2014/04/11 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
单位消防安全责任书
2014/07/23 职场文书
三峡人家导游词
2015/01/31 职场文书
环保建议书作文300字
2015/09/14 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
python中的getter与setter你了解吗
2022/03/24 Python