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巧获服务器端信息
Dec 06 PHP
PHP n个不重复的随机数生成代码
Jun 23 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
Sep 25 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
Jan 16 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
php使用百度翻译api示例分享
Jan 31 PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 PHP
PHP生成器简单实例
May 13 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
PHP isset()与empty()的使用区别详解
Feb 10 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 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数据库操作面向对象的优点
2006/10/09 PHP
用PHP实现的随机广告显示代码
2007/06/14 PHP
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
Python中用sleep()方法操作时间的教程
2015/05/22 Python
Python Requests安装与简单运用
2016/04/07 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
法学自荐信
2014/06/20 职场文书
调研座谈会发言材料
2014/08/23 职场文书
社区务虚会发言材料
2014/10/20 职场文书
2014年秘书工作总结
2014/11/25 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
教师节主题班会方案
2015/08/17 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers