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 相关文章推荐
使用 php4 加速 web 传输
Oct 09 PHP
php 正则 过滤html 的超链接
Jun 02 PHP
php 文件夹删除、php清除缓存程序
Aug 25 PHP
fgetcvs在linux的问题
Jan 15 PHP
php selectradio和checkbox默认选择的实现方法详解
Jun 29 PHP
php处理restful请求的路由类分享
Feb 27 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
Apr 24 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
May 15 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
Apr 01 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
Jan 08 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 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 管理系统程序中的后门
2009/08/05 PHP
php 代码优化的42条建议 推荐
2009/09/25 PHP
PHP session 会话处理函数
2016/06/06 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
JQuery中$之选择器用法介绍
2011/04/05 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
详解如何较好的使用js
2016/12/16 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
python远程登录代码
2008/04/29 Python
python中os操作文件及文件路径实例汇总
2015/01/15 Python
Python中的Classes和Metaclasses详解
2015/04/02 Python
详解Django 时间与时区设置问题
2019/07/23 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
python3字符串输出常见面试题总结
2020/12/01 Python
教师教学评估方案
2014/05/09 职场文书
学校教师读书活动总结
2014/07/08 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
六五普法宣传标语
2014/10/06 职场文书
民主评议党员总结
2014/10/20 职场文书
2014年村官工作总结
2014/11/24 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书
顶岗实习协议书
2015/01/29 职场文书
中学社团活动总结
2015/05/07 职场文书
开国大典观后感
2015/06/04 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js
MySql数据库触发器使用教程
2022/06/01 MySQL
如何利用python实现列表嵌套字典取值
2022/06/10 Python