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数据库的一些要注意的问题
Oct 09 PHP
php 文件状态缓存带来的问题
Dec 14 PHP
php 数组的指针操作实现代码
Feb 08 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
php中require和require_once的区别说明
Feb 27 PHP
php求数组全排列,元素所有组合的方法
May 05 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
Aug 21 PHP
CakePHP框架Session设置方法分析
Feb 23 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 PHP
PHP遍历数组的6种方式总结
Nov 17 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
一个好用的分页函数
2006/11/16 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
React实现todolist功能
2020/12/28 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
天巡全球:Skyscanner Global
2017/06/20 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
园林设计师自荐信
2013/11/18 职场文书
技术人员面试提纲
2013/11/28 职场文书
本科毕业生求职信
2014/06/15 职场文书
超市工作总结范文2014
2014/12/19 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技