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写聊天室(八)
Oct 09 PHP
PHP中读写文件实现代码
Oct 20 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
php实现的获取网站备案信息查询代码(360)
Sep 23 PHP
destoon安装出现Internal Server Error的解决方法
Jun 21 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
php中照片旋转 (orientation) 问题的正确处理
Feb 16 PHP
在Laravel中使用DataTables插件的方法
May 29 PHP
Yii框架的路由配置方法分析
Sep 09 PHP
Yii框架学习笔记之应用组件操作示例
Nov 13 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
Sep 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+SqlServer实现分页显示
2006/10/09 PHP
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
php实现的xml操作类
2016/01/15 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
python控制台英汉汉英电子词典
2020/04/23 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
深入理解Python装饰器
2016/07/27 Python
python中的字典操作及字典函数
2018/01/03 Python
Python实现简单的文本相似度分析操作详解
2018/06/16 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
python 实现表情识别
2020/11/21 Python
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
医学毕业生自荐信
2013/10/11 职场文书
一夜的工作教学反思
2014/02/08 职场文书
劳资协议书范本
2014/04/23 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS