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操作Access类(PHP+ODBC+Access)
Jan 02 PHP
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
PHP执行zip与rar解压缩方法实现代码
Dec 05 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
php实现的短网址算法分享
Jun 20 PHP
PHP转盘抽奖接口实例
Feb 09 PHP
php简单smarty入门程序实例
Jun 11 PHP
php封装的验证码类分享
Feb 26 PHP
php获取excel文件数据
Apr 21 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
关于PHP求解三数之和问题详析
Nov 09 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
ini_set的用法介绍
2014/01/07 PHP
php查询ip所在地的方法
2014/12/05 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
js几个验证函数代码
2010/03/25 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
用console.table()调试javascript
2014/09/04 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
python中pygame模块用法实例
2014/10/09 Python
Python函数中定义参数的四种方式
2014/11/30 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
python变量的存储原理详解
2019/07/10 Python
python 字符串追加实例
2019/07/20 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
Java语言的优势
2015/01/10 面试题
超市促销实习自我鉴定
2013/09/23 职场文书
2014年消防工作实施方案
2014/02/20 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
人大代表选举标语
2014/10/07 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
入党介绍人意见2015
2015/06/01 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python