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生成静态页面分析 模板+缓存+写文件
Aug 17 PHP
php面向对象全攻略 (十五) 多态的应用
Sep 30 PHP
PHP使用数组实现队列
Feb 05 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
Aug 16 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
Dec 01 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 PHP
yii2中的rules 自定义验证规则详解
Apr 19 PHP
微信支付开发维权通知实例
Jul 12 PHP
php判断文件上传图片格式的实例详解
Sep 30 PHP
Yii2框架自定义类统一处理url操作示例
May 25 PHP
Laravel 简单实现Ajax滚动加载示例
Oct 22 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取得一个类的属性和方法的实现代码
2011/05/22 PHP
php实现获取及设置用户访问页面语言类
2014/09/24 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
基于jquery的页面划词搜索JS
2010/09/14 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
javascript 动态创建表格
2015/01/08 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
Seajs源码详解分析
2019/04/02 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
python图片验证码生成代码
2016/07/02 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
Python安装whl文件过程图解
2020/02/18 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
高级电工工作职责
2013/11/21 职场文书
小学校本培训方案
2014/06/06 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
硕士学位申请报告
2015/05/15 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
初一英语教学反思
2016/02/15 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书