Golang获取视频时长
Golang获取视频时长并转成时分秒
解析视频
//constant.DurationFormat="00:00:00"// BoxHeader 信息头
type BoxHeader struct {Size uint32FourccType [4]byteSize64 uint64
}
//filePath 视频地址
func GetMP4Duration(filePath string) (duration string, err error) {file, err := os.Open(filePath)if err != nil {if strings.Contains(err.Error(), "no such file or directory") {return constant.DurationFormat, errors.New("文件不存在")}return constant.DurationFormat, err}defer func(file *os.File) {err = file.Close()if err != nil {zap.L().Error("file close fail err:",zap.Error(err))}}(file)var (info = make([]byte, 0x10)boxHeader BoxHeaderoffset int64 = 0)// 获取结构偏移for {_, err = file.ReadAt(info, offset)if err != nil {return}boxHeader = getHeaderBoxInfo(info)fourccType := getFourccType(boxHeader)if fourccType == "moov" {break}// 有一部分mp4 mdat尺寸过大需要特殊处理if fourccType == "mdat" {if boxHeader.Size == 1 {offset += int64(boxHeader.Size64)continue}}offset += int64(boxHeader.Size)}// 获取move结构开头一部分moveStartBytes := make([]byte, 0x100)_, err = file.ReadAt(moveStartBytes, offset)if err != nil {return}// 定义timeScale与Duration偏移timeScaleOffset := 0x1CdurationOffset := 0x20timeScale := binary.BigEndian.Uint32(moveStartBytes[timeScaleOffset : timeScaleOffset+4])Duration := binary.BigEndian.Uint32(moveStartBytes[durationOffset : durationOffset+4])return ResolveTime(Duration / timeScale), nil
}// getHeaderBoxInfo 获取头信息
func getHeaderBoxInfo(data []byte) (boxHeader BoxHeader) {buf := bytes.NewBuffer(data)_ = binary.Read(buf, binary.BigEndian, &boxHeader)return
}// getFourccType 获取信息头类型
func getFourccType(boxHeader BoxHeader) (fourccType string) {fourccType = string(boxHeader.FourccType[:])return
}
转成时分秒(00:00:00)
// ResolveTime 将秒转成时分秒格式
func ResolveTime(seconds uint32) string {var (h, m, s string)var day = seconds / (24 * 3600)hour := (seconds - day*3600*24) / 3600minute := (seconds - day*24*3600 - hour*3600) / 60second := seconds - day*24*3600 - hour*3600 - minute*60h = strconv.Itoa(int(hour))if hour < 10 {h = "0" + strconv.Itoa(int(hour))}m = strconv.Itoa(int(minute))if minute < 10 {m = "0" + strconv.Itoa(int(minute))}s = strconv.Itoa(int(second))if second < 10 {s = "0" + strconv.Itoa(int(second))}return fmt.Sprintf("%s:%s:%s", h, m, s)
}
调用
mediaUrl := "/www/data/video/1.mp4"
duration, err = GetMP4Duration(mediaUrl)
if err != nil {zap.L().Error("get video duration error", zap.Error(err))return}
fmt.Println(duration)
Golang获取视频时长相关推荐
- Java通过FFMPEG获取视频时长
2019独角兽企业重金招聘Python工程师标准>>> Java通过FFMPEG获取视频时长 详见https://www.yz1618.cn/view/19 转载于:https:// ...
- java如何截取视频文件_Java获取视频时长及截取帧截图详解
前言 只是最近碰到有这方面的项目需求,所以简单 Mark 下本文.下面的示例是参考过他人分享的文章,之后本人再自行实践.调整和测试过的,希望对有这方面需求的人有所帮助. 示例 添加依赖 org.byt ...
- java获得U盘根目录、读取图片视频头文件信息、获取视频时长
1.获得U盘根目录,例如我们取名U盘名称为"测试U盘",一般插入U盘后,在系统的H盘 /** * 得到系统U盘根目录 */ public String findURootPath( ...
- uni-app小程序如何获取视频时长
uni-app小程序如何获取视频时长 从网上搜寻了一下发现都没有单纯获取视频时长的方法,于是只能自己研究一下了 uni-app和小程序都提供了video组件,却发现并没有提供获取视频时长属性或方法, ...
- java获取视频时长_Java获取视频的大小、时长
前端上传视频之后,根据上传的视频文件获取视频的大小和时长 1.获取视频时长 private String ReadVideoTime(File source) { Encoder encoder = ...
- ffmpeg获取视频时长和分辨率
文章目录 ffmpeg获取视频文件时长和分辨率 获取视频时长 获取视频分辨率 ffmpeg获取视频文件时长和分辨率 获取视频时长 import os import subprocess# video_ ...
- java获取视频时长(实测可行)
因为数据库视频表有一段时间丢失维护duration字段, 现在有需求需要用到此字段,只能再重新获取一遍, 更新表.哎!!! 先奉上 https://github.com/opensourceteams ...
- java获取视频时长
java获取视频时长 需要一个包,没有的找我要(java-1.0.2-1.0.2.jar) 一个可以通过视频的url地址或者是上传视频 文件有类型为(MultipartFile)的来获取视频的时长. ...
- 通过ffmpeg获取视频时长
通过Java获取视频时长,可以通过jave和ffmpeg这两种工具来获取,jave和ffmpeg都能拿到本地视频文件的时长,可如果是播放视频URL,就只能通过ffmpeg来获取. 现在视频文件基本上都 ...
最新文章
- c语言N*N的二维数组,c语言高手帮个忙(请先看问题,好解答
- 卢京潮自动控制原理ppt_视觉定位系统在贴片机中的使用与原理作用
- python画图程序-编程入门06:Python海龟绘图
- Storm中并行度原来是这样计算的(1.0.1版本)
- 分析决策树算法和逻辑回归算法的不同之处
- 2021年暑期旅游数据报告
- 如何评估数据适不适合放入Redis中?
- SageMaker 超参数优化作业
- Apollo添加新的can通信接口的GPS设备
- 数据库逻辑结构设计 → E-R图
- 【RFID】RFID的标准体系
- 我的世界贝爷生存用什么Java_我的世界贝爷生存MOD教程 [MITE] MC实在是太简单了教程详解 | 我的世界 | MC世界侠...
- 基于python的LSB加密算法设计
- 电路板常用连接器(接插件)介绍与选型建议(板对板连接器,板对线连接器,线对线连接器等)
- 微信公众号:提示“redirect_uri 参数错误”
- iOS 组件化加载本地 gif 图片
- 使用VS+VisualGDB编译Linux版本RCF
- java学不下去能学web安全吗,这半年学习 Web 安全的一点心得体会
- 学大伟业Day解题报告
- pg 快速造1000w测试数据