php 调用ffmpeg获取视频信息的简单实现


Posted in PHP onApril 03, 2017

ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,包含了libavcodec,保证高可移值性和编解码质量。

本文将介绍使用php调用ffmpeg获取视频信息,调用ffmpeg首先需要服务器上安装了ffmpeg,安装方法很简单,可自行搜索。

代码如下:

<?php
// 定义ffmpeg路径及命令常量
define('FFMPEG_CMD', '/usr/local/bin/ffmpeg -i "%s" 2>&1');

/**
 * 使用ffmpeg获取视频信息
 * @param String $file 视频文件
 * @return Array
 */
function getVideoInfo($file){
 ob_start();
 passthru(sprintf(FFMPEG_CMD, $file));
 $video_info = ob_get_contents();
 ob_end_clean();

 // 使用输出缓冲,获取ffmpeg所有输出内容
 $ret = array();

 // Duration: 00:33:42.64, start: 0.000000, bitrate: 152 kb/s
 if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $video_info, $matches)){
  $ret['duration'] = $matches[1]; // 视频长度
  $duration = explode(':', $matches[1]);
  $ret['seconds'] = $duration[0]*3600 + $duration[1]*60 + $duration[2]; // 转为秒数
  $ret['start'] = $matches[2]; // 开始时间
  $ret['bitrate'] = $matches[3]; // bitrate 码率 单位kb
 }

 // Stream #0:1: Video: rv20 (RV20 / 0x30325652), yuv420p, 352x288, 117 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
 if(preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $video_info, $matches)){
  $ret['vcodec'] = $matches[1];  // 编码格式
  $ret['vformat'] = $matches[2]; // 视频格式
  $ret['resolution'] = $matches[3]; // 分辨率
  list($width, $height) = explode('x', $matches[3]);
  $ret['width'] = $width;
  $ret['height'] = $height;
 }

 // Stream #0:0: Audio: cook (cook / 0x6B6F6F63), 22050 Hz, stereo, fltp, 32 kb/s
 if(preg_match("/Audio: (.*), (\d*) Hz/", $video_info, $matches)){
  $ret['acodec'] = $matches[1];  // 音频编码
  $ret['asamplerate'] = $matches[2]; // 音频采样频率
 }

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

 $ret['size'] = filesize($file); // 视频文件大小
 $video_info = iconv('gbk','utf8', $video_info);
 return array($ret, $video_info);

}

// 输出视频信息
$video_info = getVideoInfo('myvideo.avi');
print_r($video_info[0]);
?>

输出:

Array
(
 [duration] => 00:33:42.64
 [seconds] => 2022.64
 [start] => 0.000000
 [bitrate] => 152
 [vcodec] => rv20 (RV20 / 0x30325652)
 [vformat] => yuv420p
 [resolution] => 352x288
 [width] => 352
 [height] => 288
 [acodec] => cook (cook / 0x6B6F6F63)
 [asamplerate] => 22050
 [play_time] => 2022.64
 [size] => 38630744
)

以上这篇php 调用ffmpeg获取视频信息的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php缓存技术介绍
Nov 25 PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
关于PHP结束标签的使用细节探讨及联想
Mar 04 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
Nov 14 PHP
php使用Jpgraph创建3D饼形图效果示例
Feb 15 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
Feb 20 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 #PHP
thinkphp关于简单的权限判定方法
Apr 03 #PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
Apr 01 #PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 #PHP
thinkphp自定义权限管理之名称判断方法
Apr 01 #PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 #PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 #PHP
You might like
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
python聊天程序实例代码分享
2013/11/18 Python
python实现多层感知器
2019/01/18 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
史上最全面的Java面试题汇总!
2015/02/03 面试题
超级搞笑检讨书
2014/01/15 职场文书
采购意向书范本
2014/03/31 职场文书
球队口号
2014/06/18 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
redis数据结构之压缩列表
2022/03/21 Redis
Java实现简单小画板
2022/06/10 Java/Android
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers