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 getsiteurl()函数
Sep 05 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
May 18 PHP
比较discuz和ecshop的截取字符串函数php版
Sep 03 PHP
用php来改写404错误页让你的页面更友好
Jan 24 PHP
PHP输出时间差函数代码
Jan 28 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
php实现文件下载代码分享
Aug 19 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
php pthreads多线程的安装与使用
Jan 19 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
Mar 31 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
PHP中文件上传的一个问题
2010/09/04 PHP
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
php 强制下载文件实现代码
2013/10/28 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
详解Javascript函数声明与递归调用
2016/10/22 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
Django中Model的使用方法教程
2018/03/07 Python
详解python 注释、变量、类型
2018/08/10 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
建筑工程技术应届生求职信
2013/11/17 职场文书
学校安全检查制度
2014/01/27 职场文书
捐书活动倡议书
2015/04/27 职场文书
Mysql文件存储图文详解
2021/06/01 MySQL
python实现MD5进行文件去重的示例代码
2021/07/09 Python
MySQL中一条update语句是如何执行的
2022/03/16 MySQL