php 调用ffmpeg获取视频信息的简单实现

 更新时间:2017年04月03日 09:46:10   投稿:jingxian  
下面小编就为大家带来一篇php 调用ffmpeg获取视频信息的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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获取视频信息的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 工厂模式在Zend Framework中应用介绍

    工厂模式在Zend Framework中应用介绍

    在Zend Framework中,使用了多种设计模式。其中对数据库的封装,用到了工厂模式
    2012-07-07
  • 在Mac OS下搭建LNMP开发环境的步骤详解

    在Mac OS下搭建LNMP开发环境的步骤详解

    这篇文章主要介绍了在Mac OS下搭建LNMP开发环境的步骤,文中通过一步步的步骤介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • PHP调用Linux的命令行执行文件压缩命令

    PHP调用Linux的命令行执行文件压缩命令

    一开始,我和普通青年一样,想到用PHP内置的 ZipArchive纠结的是环境上没安装zip扩展,想采用用PHP调用Linux的命令行 ,执行压缩命令,感兴趣的朋友可以了解下,希望本文对你有所帮助
    2013-01-01
  • php实现指定字符串中查找子字符串的方法

    php实现指定字符串中查找子字符串的方法

    这篇文章主要介绍了php实现指定字符串中查找子字符串的方法,涉及php中strpos()函数查找字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • php使用Jpgraph绘制饼状图的方法

    php使用Jpgraph绘制饼状图的方法

    这篇文章主要介绍了php使用Jpgraph绘制饼状图的方法,实例分析了Jpgraph通过PieGraph实现饼状图的技巧,需要的朋友可以参考下
    2015-06-06
  • PHP取整数函数常用的四种方法小结

    PHP取整数函数常用的四种方法小结

    PHP取整数函数常用的四种方法,下面收集了四个函数;经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已~~主要是:ceil,floor,round,intval
    2012-07-07
  • JavaScript+PHP实现视频文件分片上传的示例代码

    JavaScript+PHP实现视频文件分片上传的示例代码

    这篇文章主要介绍了基于JavaScript+PHP实现视频文件分片上传,视频文件分片上传,整体思路是利用JavaScript将文件切片,然后循环调用上传接口 upload.php 将切片上传到服务器,文中有详细代码供大家参考,需要的朋友可以参考下
    2024-02-02
  • PHP调用全国天气预报数据接口查询天气示例

    PHP调用全国天气预报数据接口查询天气示例

    这篇文章主要介绍了PHP调用全国天气预报数据接口查询天气,涉及第三方平台的key申请、接口数据调用及curl相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • PHP实现带进度条的Ajax文件上传功能示例

    PHP实现带进度条的Ajax文件上传功能示例

    这篇文章主要介绍了PHP实现带进度条的Ajax文件上传功能,结合实例形式分析了php+ajax文件上传基础上添加进度条功能相关实现技巧,需要的朋友可以参考下
    2019-07-07
  • PHP与SQL注入攻击[二]

    PHP与SQL注入攻击[二]

    PHP与SQL注入攻击[二]...
    2007-04-04

最新评论