【PHP】PHP利用ffmreg获取音频、视频的详细信息

目录

一、目的

二、下载并安装ffmreg

三、PHP代码

四、运行结果


一、目的

使用PHP利用ffmreg获取音频、视频的详细信息,音视频总时长、码率、视频分辨率、音频编码、音频采样频率、实际播放时间、文件大小。

二、下载并安装ffmreg

1、下载地址:https://download.csdn.net/download/qq_25285531/88750220

2、解压放到项目下,文件夹下有三个exe

三、PHP代码

说明:ffmpeg 更换成自己实际存放地址;

getVideoInfo()方法有三个判断,分别是获取音视频基本信息(音视频时长、音视频秒数、开始时间、码率等),视频信息(视频编码、视频格式、视频分辨率、视频尺寸),音频信息(音频编码、音频采样频率)、音视频文件大小

/**
 * 获取音视频基本信息
 */
public function getVideoInfo($file)
{
	 $command = sprintf('E:/phpstudy_pro/WWW/test/public/ffmpeg/bin/ffmpeg -i "%s" 2>&1', $file);  //你的ffmpeg路径

	 ob_start();
	 passthru($command);
	 $info = ob_get_contents();
	 ob_end_clean();

	 $data = array();
	 if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $info, $match)) {
         $data['duration'] = $match[1]; //播放时间
         $arr_duration = explode(':', $match[1]);
         $data['seconds'] = $arr_duration[0] * 3600 + $arr_duration[1] * 60 + $arr_duration[2]; //转换播放时间为秒数
         $data['start'] = $match[2]; //开始时间
         $data['bitrate'] = $match[3]; //码率(kb)
     }
     if (preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $info, $match)) {
         $data['vcodec'] = $match[1]; //视频编码格式
         $data['vformat'] = $match[2]; //视频格式
         $data['resolution'] = $match[3]; //视频分辨率
         $arr_resolution = explode('x', $match[3]);
         $data['width'] = $arr_resolution[0];
         $data['height'] = $arr_resolution[1];
     }
     if (preg_match("/Audio: (\w*), (\d*) Hz/", $info, $match)) {
         $data['acodec'] = $match[1]; //音频编码
         $data['asamplerate'] = $match[2]; //音频采样频率
     }
     if (isset($data['seconds']) && isset($data['start'])) {
         $data['play_time'] = $data['seconds'] + $data['start']; //实际播放时间
     }
     $data['size'] = filesize($file); //文件大小
     return $data;
}

/**
 * 调用
 */
public function video()
{
	// 定义视频路径
	$videoPath = 'E:/phpstudy_pro/WWW/test/public/uploads/8秒.mp4';
	$video_info = $this->getVideoInfo($videoPath);
	echo '<pre>';
    print_r($video_info);
}

四、运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/326421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

现在00后开发人员不晓得加班为何事嘛?

我招了两个做HTML5开端开发的人员&#xff0c;是从培训机构招来的&#xff0c;按理说他们应该很努学很用样才对的。他们上班第一天我就跟他们讲&#xff0c;我们不需要上、下班打卡&#xff1b;你们也不必太过担心迟到或早退。因为我们搞开发的人员首先是按自己的工作任务完成情…

【23种设计模式应用场景汇总】

23种设计模式应用场景汇总 设计模式是一种在软件开发中解决特定问题的通用解决方案。下面我将尝试将23种设计模式融入到一个场景中&#xff1a; 假设我们正在开发一个在线购物系统&#xff0c;我们可以使用以下设计模式&#xff1a; 1. 工厂方法模式&#xff1a;当用户在网站上…

云贝教育 |【OceanBase】OBCA认证考试预约流程

一、OBCA账号登录/注册&#xff0c;链接 https://www.oceanbase.com/ob/login/mobile?gotohttps%3A%2F%2Fwww.oceanbase.com%2Ftraining%2Fdetail%3Flevel%3DOBCA 注册完之后&#xff0c;请点击右上“登录”进行实名认证 OBCA考试报名链接&#xff1a;https://www.oceanbase.…

IDEA2023的激活与安装(全网最靠谱,最快捷的方式)

前言&#xff1a; 相信很多小伙伴已经开始了java的学习之旅&#xff0c;想要更快乐的学习当然少不了IDEA这个得力的开发工具软件。但是IDEA是付费的&#xff0c;免费版功能有太少&#xff0c;怎么才能既免费&#xff0c;又能使用上正式版呢&#xff01;当然还是激活啦&#xf…

数据结构与算法之美学习笔记:48 | B+树:MySQL数据库索引是如何实现的?

目录 前言算法解析总结引申 前言 本节课程思维导图&#xff1a; 作为一个软件开发工程师&#xff0c;你对数据库肯定再熟悉不过了。作为主流的数据存储系统&#xff0c;它在我们的业务开发中&#xff0c;有着举足轻重的地位。在工作中&#xff0c;为了加速数据库中数据的查找速…

maven导入无法拉取所需依赖

maven导入无法拉取所需依赖 1.原因2.解决搞定收工&#xff01; 1.原因 公司使用的是gradle&#xff0c;配置的私有云&#xff0c;maven里面配置私有云完全使用不了&#xff0c;无论配置国内还是国外的&#xff0c;导入的项目报错拉不到jar包。 <mirror><id>mirro…

【小智好书分享• 第一期】深度学习计算机视觉

目录 一、内容简介二、内页插图三、书籍目录四、粉丝福利 &#x1f389;博客主页&#xff1a;小智_x0___0x_ &#x1f389;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f389;系列专栏&#xff1a;好书分享 &#x1f389;代码仓库&#xff1a;小智…

汇编代码生成和编译器的后端

1.前置程序&#xff1a;语义分析和中间代码生成 基于SLR(1)分析的语义分析及中间代码生成程序-CSDN博客https://blog.csdn.net/lijj0304/article/details/135097554?spm1001.2014.3001.5501 2.程序目标 在前面编译器前端实现的基础上&#xff0c;将所生成的中间代码翻译成某…

Windows11搭建Python环境(2)- Anaconda虚拟环境中安装Git

在搭建MetaGPT运行环境过程中&#xff0c;使用了Anaconda虚拟环境&#xff0c;在运行MetaGPT时出现错误&#xff1a; 可以看到是没有找到git指令。 在Windows上安装Git&#xff0c;可以直接去官网下载.exe文件&#xff0c;然后安装即可。 但是上面安装完成后&#xff0c;是无…

三使用Docker Hub管理镜像

使用Docker Hub管理镜像 Docker Hub是Docker官方维护的Docker Registry&#xff0c;上面存放着很多优秀的镜像。不仅如此&#xff0c;Docker Hub还提供认证、工作组结构、工作流工具、构建触发器等工具来简化我们的工作。 前文已经讲过&#xff0c;我们可使用docker search 命…

【VUE】element-ui+vue-router:实现导航栏跳转路由

实现目的 页面中点击导航栏菜单中的某一选项卡&#xff0c;使用导航栏进行路由跳转。如下图所示。 我们设计三个页面&#xff0c;首页是App.vue, 两个导航页面分别为 About.vue, Home.vue。在App.vue 页面中有导航菜单&#xff0c;点击菜单分别跳转。 1. 安装 npm install v…

2024中国国际光伏展

2024中国国际光伏展将是中国举办的一个重要的展览会&#xff0c;专门展示光伏技术和产业的最新发展。该展览会将吸引国内外光伏企业、研究机构、政府机构和专业人士参展和参观。 在2024年的中国国际光伏展上&#xff0c;参展商将展示他们最新的光伏技术、设备和产品&#xff0c…

Jetson AGX Orin安装archiconda、Pytorch

想在Jetson AGX Orin创建一个虚拟环境&#xff0c;然后安装pytorch&#xff0c;过程中遇到了很多的坑&#xff0c;这篇文章主要用于记录过程~因为Orin本身是Arm架构&#xff0c;X86架构可以装Anaconda&#xff0c;对于ARM要装archiconda。 1.安装archiconda 1.1确定操作系统架…

[自动驾驶算法][从0开始轨迹预测]:二、自动驾驶系统中常用的坐标系及相应的转换关系

自动驾驶中常见的坐标系与坐标转换 1. 传感器坐标系1.1 相机坐标系统1) 相机相关基础知识2) 相机各坐标系图像/像素坐标系相机坐标系像平面坐标系 3) 相机各坐标系之间的转换像平面坐标系到像素坐标系的转换&#xff08;平移缩放变换&#xff09;相机坐标系转像平面坐标系&…

uniCloud ---- uni-captch实现图形验证码

目录 用途说明 组成部分 目录结构 原理时序 云端一体组件介绍 验证码配置&#xff08;可选&#xff09;&#xff1a; 普通验证码组件 公共模块 云函数公用模块 项目实战 创建云函数 创建注册页 创建云函数 关联公用模块 uni-captcha 刷新验证码 自定义实现 验…

【实战记录】 vagrant+virtualbox+docker 轻松用虚拟机集成组件

用途 最近要学一大堆组件&#xff0c;不想直接安装本机上&#xff0c;然后gpt说&#xff1a;你可以用vagrant起个虚拟机&#xff08;然后docker拉取各种组件的镜像&#xff09;&#xff1b;或者k8s 实战的整体思路 首先安装virtualbox和vagrant。然后cmd依次键入三条命令 安…

Linux批量快速修改文件名的三种方法

在Linux中&#xff0c;批量重命名文件是一项常见且有用的操作。以下是三种常用的批量重命名文件的方法&#xff0c;每种方法都附有示例。这些方法既可以适用于新手&#xff0c;也适用于更有经验的用户。 话不多说&#xff0c;直接上干货&#xff01; rename 命令 rename命令是…

ITE IT6801FNBX HDMI接收器 芯片

一、物料概述 IT6801FN是一款单端口HDMI接收器&#xff0c;可在HDMI1.4和MHL2.1双模式下工作&#xff0c;完全兼容MHL2.1、HDMI 1.4a、HDMI 1.4a3D和HDCP1.4&#xff0c;还可向后兼容DVI 1.0规格。IT6801FN具有深彩色功能&#xff08;高达36位&#xff09;&#xff0c;可确保接…

Redis主从+哨兵集群(基于CentOS-8.0)高可用部署方案

目录 一、环境描述 二、Redis 主从集群部署 2.1 Redis下载 2.2 Redis解压 和移动文件 2.4 编译、安装Redis 2.6 新建 bin 和 etc 文件夹 2.7 分发Redis 2.8 配置 2.8.1 主节点配置 2.8.2 从节点配置 2.9 启动Redis服务 2.10 验证主从服务 2.11 查看节点角色信息 2…

k8s的存储卷、数据卷---动态PV创建

当发布PVC之后可以生成PV&#xff0c;还可以在动态服务器上直接生成挂载目录。PVC直接绑定和使用PV。 动态PV需要两个组件 存储卷插件&#xff1a;Provisioner(存储分配器)根据定义的属性创建PV StorageClass&#xff1a;定义属性 存储卷插件 存储卷插件&#xff1a;k8s本…