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中文汉字验证码
Apr 08 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 PHP
PHP多线程抓取网页实现代码
Jul 22 PHP
php字符编码转换之gb2312转为utf8
Oct 28 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
老生常谈PHP位运算的用途
Mar 12 PHP
php设计模式之适配器模式原理、用法及注意事项详解
Sep 24 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 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 时间转换Unix时间戳代码
2010/01/22 PHP
php获取参数的几种方法总结
2014/02/18 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
php遍历目录方法小结
2015/03/10 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
js继承实现方法详解
2016/12/16 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
新手该如何学python怎么学好python?
2008/10/07 Python
在Python中使用异步Socket编程性能测试
2014/06/25 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
python如何将图片转换素描画
2020/09/08 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
幼儿园教师教育感言
2014/02/28 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
环卫工作个人总结
2015/03/04 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
感恩教师主题班会
2015/08/12 职场文书