getID3获取本地或远程视频时长

音频文件也可使用,使用ffmeg安装太复杂了

附ffmpeg方式:centos下安装ffmpeg_yum安装ffmpeg-CSDN博客

使用composer先安装

composer require james-heinrich/getid3

获取本地视频

 //获取本地视频$video_path = $_SERVER['DOCUMENT_ROOT'].$params['video'];$getid3 = new getID3();$info = $getid3->analyze($video_path);var_dump($info);

获取远程视频信息,也是生成临时文件,再删除,如果再上传本地的时候直接使用本地获取即可

//远程视屏地址 
$remotefilename = 'https://vdept3.bdstatic.com/mda-qfvaqpnzzj3qf31w/cae_h264/1719738331410781347/mda-qfvaqpnzzj3qf31w.mp4?v_from_s=hkapp-haokan-hbf&auth_key=1743144763-0-0-fcab6e8d4022a8b4d186e26431dcc39b&bcevod_channel=searchbox_feed&pd=1&cr=0&cd=0&pt=3&logid=3163875783&vid=16648779981624158842&klogid=3163875783&abtest=';if ($fp_remote = fopen($remotefilename, 'rb')) {$localtempfilename = tempnam('', 'getID3');if ($fp_local = fopen($localtempfilename, 'wb')) {while ($buffer = fread($fp_remote, 8192)) {fwrite($fp_local, $buffer);}fclose($fp_local);$getID3 = new getID3();$ThisFileInfo = $getID3->analyze($localtempfilename);$second = floor($ThisFileInfo['playtime_seconds']) ?? 0; //秒数向下取整var_dump($ThisFileInfo);//打印信息unlink($localtempfilename);}fclose($fp_remote);}

打印出来的视频信息

array(19) {["GETID3_VERSION"] => string(19) "1.9.23-202310190849"["filesize"] => int(8323282)["filepath"] => string(35) "C:/Users/PC-8625/AppData/Local/Temp"["filename"] => string(11) "getFCB0.tmp"["filenamepath"] => string(47) "C:/Users/PC-8625/AppData/Local/Temp/getFCB0.tmp"["avdataoffset"] => int(87891)["avdataend"] => int(8323282)["fileformat"] => string(3) "mp4"["audio"] => array(10) {["dataformat"] => string(3) "mp4"["bitrate"] => int(65622)["codec"] => string(19) "ISO/IEC 14496-3 AAC"["sample_rate"] => float(44100)["channels"] => int(2)["bits_per_sample"] => int(16)["lossless"] => bool(false)["channelmode"] => string(6) "stereo"["compression_ratio"] => float(0.046500850340136)["streams"] => array(1) {[0] => array(9) {["dataformat"] => string(3) "mp4"["bitrate"] => int(65622)["codec"] => string(19) "ISO/IEC 14496-3 AAC"["sample_rate"] => float(44100)["channels"] => int(2)["bits_per_sample"] => int(16)["lossless"] => bool(false)["channelmode"] => string(6) "stereo"["compression_ratio"] => float(0.046500850340136)}}}["video"] => array(8) {["dataformat"] => string(9) "quicktime"["rotate"] => int(0)["resolution_x"] => int(640)["resolution_y"] => int(360)["fourcc"] => string(4) "avc1"["fourcc_lookup"] => string(16) "H.264/MPEG-4 AVC"["frame_rate"] => float(25)["bitrate"] => float(291412.00549507)}["tags"] => array(1) {["quicktime"] => array(1) {["encoding_tool"] => array(1) {[0] => string(44) "Multimedia Cloud Transcode (cloud.baidu.com)"}}}["comments"] => array(1) {["language"] => array(1) {[0] => string(12) "Undetermined"}}["encoding"] => string(5) "UTF-8"["mime_type"] => string(9) "video/mp4"["quicktime"] => array(13) {["hinting"] => bool(false)["controller"] => string(8) "standard"["ftyp"] => array(7) {["hierarchy"] => string(4) "ftyp"["name"] => string(4) "ftyp"["size"] => int(32)["offset"] => int(0)["signature"] => string(4) "isom"["unknown_1"] => int(512)["fourcc"] => string(4) "isom"}["timestamps_unix"] => array(2) {["create"] => array(3) {["moov mvhd"] => int(-2082844800)["moov trak tkhd"] => int(-2082844800)["moov trak mdia mdhd"] => int(-2082844800)}["modify"] => array(3) {["moov mvhd"] => int(-2082844800)["moov trak tkhd"] => int(-2082844800)["moov trak mdia mdhd"] => int(-2082844800)}}["time_scale"] => int(44100)["display_scale"] => float(1)["video"] => array(5) {["rotate"] => int(0)["resolution_x"] => int(640)["resolution_y"] => int(360)["frame_rate"] => float(25)["frame_count"] => int(4613)}["stts_framecount"] => array(2) {[0] => int(4613)[1] => int(7947)}["audio"] => array(5) {["bitrate"] => int(65622)["codec"] => string(3) "mp4"["sample_rate"] => float(44100)["channels"] => int(2)["bit_depth"] => int(16)}["comments"] => array(1) {["encoding_tool"] => array(1) {[0] => string(44) "Multimedia Cloud Transcode (cloud.baidu.com)"}}["free"] => array(4) {["hierarchy"] => string(4) "free"["name"] => string(4) "free"["size"] => int(8)["offset"] => int(87875)}["mdat"] => array(4) {["hierarchy"] => string(4) "mdat"["name"] => string(4) "mdat"["size"] => int(8235399)["offset"] => int(87883)}["encoding"] => string(5) "UTF-8"}["playtime_seconds"] => float(184.529)["bitrate"] => float(357034.00549507)["tags_html"] => array(1) {["quicktime"] => array(1) {["encoding_tool"] => array(1) {[0] => string(44) "Multimedia Cloud Transcode (cloud.baidu.com)"}}}["playtime_string"] => string(4) "3:05"
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10、Linux C 网络编程(完整版)

1、网络发展历史和分层 1.1 Internet 的历史 起源: 1957 年:苏联发射第一颗人造卫星 "Sputnik"。 1958 年:美国总统艾森豪威尔成立 DARPA(国防部高级研究计划署)。 1968 年:DARPA 提出 "…

前端:开源软件镜像站 / 清华大学开源软件镜像站 / 阿里云 / 网易 / 搜狐

一、理解开源软件镜像站 开源软件镜像是指开源软件在远程服务器上的备份副本,允许用户通过互联网快速下载和安装所需的软件。在国内,有多个知名的开源软件镜像站,为开发者提供稳定、快速的开源软件下载服务。 二、常见开源软件镜像站 序号…

Oracle 数据库中优化 INSERT INTO 操作的性能

在 Oracle 数据库中优化 INSERT INTO 操作的性能,尤其是在处理大批量数据时,可以通过以下方法显著提升效率。 使用直接路径插入(Direct-Path Insert) 通过 APPEND 提示绕过缓冲区缓存,直接写入数据文件,减…

嵌入式硬件篇---嘉立创PCB绘制

文章目录 前言一、PCB绘制简介1.1绘制步骤1.1.1前期准备1.1.2原理图设计1.1.3原理图转PCB1.1.4PCB布局1.1.5布线1.1.6布线优化和丝印1.1.7制版 1.2原理1.2.1电气连接原理1.2.2信号传输原理1.2.3电源和接地原理 1.3注意事项1.3.1元件封装1.3.2布局规则1.3.3过孔设计1.3.4DRC检查…

ideal自动生成类图的方法

在 IntelliJ IDEA 中,“**在项目资源管理器中选择以下类**” 是指通过 **项目资源管理器(Project Tool Window)** 找到并选中你需要生成类图的类文件(如 .java 文件),然后通过右键菜单或快捷键操作生成类图…

【零基础入门unity游戏开发——2D篇】2D物理关节 —— Joint2D相关组件

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…

在Vue 3 + TypeScript + Vite 项目中安装和使用 SCSS

在Vue 3 TypeScript Vite 项目中安装和使用 SCSS 1、安装 SCSS 的相关依赖 npm install sass --save-dev2、配置 Vite 对于 Vue 3,Vite 已经内置了对 SCSS 的支持,通常不需要额外的配置。但是,如果需要自定义配置,可以在路径…

【渗透测试】Vulnhub靶机-FSoft Challenges VM: 1-详细通关教程

下载地址:https://www.vulnhub.com/entry/fsoft-challenges-vm-1,402/ 目录 前言 信息收集 目录扫描 wpscan扫描 修改密码 反弹shell 提权 思路总结 前言 开始前注意靶机简介,当第一次开机时会报apache错误,所以要等一分钟后重启才…

Redis 6.2.6 生产环境单机配置详解redis.conf

文章目录 Redis 生产环境配置详解配置文件示例基础网络与进程管理RDB 持久化配置复制(主从同步)设置内存管理AOF 持久化性能优化设置限制与监控其他参数完整配置总结 Redis 生产环境配置详解 在实际生产环境中,为了保障 Redis 的稳定性和高性…

SpringBoot实战:Excel文件上传、数据验证与存储全流程解析

一、需求场景与技术选型 在企业管理、数据中台等系统中,Excel文件处理是常见需求。本文将基于SpringBoot实现以下核心功能: 支持.xls/.xlsx文件上传数据完整性验证(非空、格式等)业务数据验证(关联数据库校验&#x…

使用Java爬虫按关键字搜索淘宝商品?

在电商领域,通过关键字搜索商品是获取商品信息的常见需求。Java爬虫技术可以帮助我们自动化地获取这些信息,提高工作效率。本文将详细介绍如何使用Java爬虫按关键字搜索淘宝商品,并提供完整的代码示例。 一、准备工作 1. 注册淘宝开放平台账…

【Git】5 个分区的切换方式及示例

目录 1. **工作区(Working Directory)**2. **缓存区(Stage/Index)**3. **本地仓库(Local Repository)**4. **远程仓库(Remote Repository)**5. **贮藏区(Stash&#xff0…

【计算机视觉】YOLO语义分割

一、语义分割简介 1. 定义 语义分割(Semantic Segmentation)是计算机视觉中的一项任务,其目标是对图像中的每一个像素赋予一个类别标签。与目标检测只给出目标的边界框不同,语义分割能够在像素级别上区分不同类别,从…

MATLAB之数据分析图系列:从二维到三维(直接套用)

MATLAB以其强大的矩阵运算和可视化功能,成为科研、工程领域的标配工具。本文提供从基础二维图形到复杂三维模型的即用代码块,涵盖数据标注、多图排版、动态演示等核心技巧 所有代码均经过MATLAB 2023a实测,替换数据即可生成专业级图表。” …

HTTP响应数据包全面解析:结构、原理与最佳实践

目录 HTTP响应概述 HTTP响应数据包结构 2.1 状态行 2.2 响应头 2.3 空行 2.4 响应体 HTTP状态码详解 3.1 1xx信息响应 3.2 2xx成功响应 3.3 3xx重定向 3.4 4xx客户端错误 3.5 5xx服务器错误 常见HTTP响应头字段 响应体内容类型 缓存控制机制 实际HTTP响应示例分…

H.264编码解析与C++实现详解

一、H.264编码核心概念 1.1 分层编码结构 H.264采用分层设计,包含视频编码层(VCL)和网络抽象层(NAL)。VCL处理核心编码任务,NAL负责封装网络传输数据。 1.2 NALU单元结构 // NAL单元头部结构示例 struc…

快速入手-基于Django-rest-framework的自身组件权限认证(九)

1、在对应的视图函数里增加认证(局部起作用,不全局生效) 导入类: from rest_framework.authentication import ( BasicAuthentication, SessionAuthentication, ) from rest_framework.permissions import IsAuthentica…

受控组件和非受控组件的区别

在 React 中,​受控组件(Controlled Components)​ 和 ​非受控组件(Uncontrolled Components)​ 是处理表单元素的两种不同方式,它们的核心区别在于 ​数据管理的方式 和 ​与 React 的交互模式。 受控组件…

迈向云原生:理想汽车 OLAP 引擎变革之路

在如今数据驱动的时代,高效的分析引擎对企业至关重要。理想汽车作为智能电动汽车的领军企业,面临着海量数据分析的挑战。本文将展开介绍理想汽车 OLAP 引擎从存算一体向云原生架构演进的变革历程,以及在此过程中面临的挑战,以及是…

ZLMediaKit 源码分析——[3] ZLToolKit 中EventPoller之网络事件处理

系列文章目录 第一篇 基于SRS 的 WebRTC 环境搭建 第二篇 基于SRS 实现RTSP接入与WebRTC播放 第三篇 centos下基于ZLMediaKit 的WebRTC 环境搭建 第四篇 WebRTC学习一:获取音频和视频设备 第五篇 WebRTC学习二:WebRTC音视频数据采集 第六篇 WebRTC学习三…