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 Mysql日期和时间函数集合
Nov 16 PHP
用php或asp创建网页桌面快捷方式的代码
Mar 23 PHP
php addslashes 利用递归实现使用反斜线引用字符串
Aug 05 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
Apr 30 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
php实现的单一入口应用程序实例分析
Sep 23 PHP
CodeIgniter连贯操作的底层原理分析
May 17 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 23 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
配置最新的PHP加MYSQL服务器
2006/10/09 PHP
php文件操作实例代码
2012/05/10 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
discuz目录文件资料汇总
2014/12/30 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
php精度计算的问题解析
2019/06/21 PHP
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
2017/03/06 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
python标准算法实现数组全排列的方法
2015/03/17 Python
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
为什么python比较流行
2020/06/19 Python
Python之字典对象的几种创建方法
2020/09/30 Python
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
四风存在的原因分析
2014/02/11 职场文书
安全协议书范本
2014/04/21 职场文书
财务情况说明书范文
2014/05/06 职场文书
导师就业推荐信范文
2014/05/22 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
药品开票员岗位职责
2015/04/15 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android