当前位置: 首页 > news >正文

Golang获取音视频时长信息

文章目录

  • 一、工具简介
  • 二、使用golang获取时间长

一、工具简介

这些工具都是与多媒体处理和流媒体相关的开源工具,它们都属于 FFmpeg 多媒体框架。

  • FFmpeg

是一个用于处理多媒体内容(音频、视频、图像等)的命令行工具。它可以执行各种各样的操作,包括转码、剪辑、合并、分离、编码、解码等。FFmpeg 是一个功能强大且广泛使用的工具,可以在多种平台上运行。

  • FFplay

是 FFmpeg 提供的一个简单的媒体播放器,它可以播放各种格式的音频和视频文件。FFplay 是基于 FFmpeg 库构建的,它提供了一个轻量级的命令行界面,可用于快速播放多媒体文件,适用于测试和简单的播放任务。

  • FFprobe

是一个用于分析多媒体文件的工具。它提供了详细的信息,包括多媒体文件的编解码器、格式、流信息等。FFprobe 可以帮助用户了解多媒体文件的特性,例如分辨率、帧率、比特率等,这对于诊断和处理多媒体文件非常有用。

  • FFserver

是一个流媒体服务器,可以用于实时转码和分发音频/视频流。它可以接受来自各种来源(如摄像头、音频接口等)的多媒体流,并将其转码为不同的格式和分辨率,然后通过网络分发给客户端。FFserver 可以用于构建自己的流媒体平台,例如音视频直播服务或视频点播服务。

二、使用golang获取时间长

package mainimport ("bufio""fmt""os/exec""strconv"
)// getDuration 通过调用 ffprobe 来获取音视频文件的时长// 函数接收一个字符串参数 filePath,表示音视频文件的路径。
// 函数返回两个值:一个整数表示时长(秒),一个 error 表示可能发生的错误。
func getDuration(filePath string) (int, error) {// 使用 exec.Command 创建一个新的命令,调用 ffprobe 并带上一系列参数来指示它只输出文件的时长。cmd := exec.Command("/Users/lijie/workspace/ffmpeg-lijie/ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", filePath)//通过 StdoutPipe 方法获取命令的标准输出流,以便我们可以读取 ffprobe 的输出。stdout, err := cmd.StdoutPipe()//如果在获取输出流时发生错误,则返回错误。if err != nil {return 0, err}//启动 ffprobe 命令。如果启动失败,则返回错误。if err := cmd.Start(); err != nil {return 0, err}//创建一个新的 bufio.Scanner 来读取 ffprobe 的标准输出。scanner := bufio.NewScanner(stdout)//使用 Scan 方法读取输出的第一行(即文件的时长)。if scanner.Scan() {//scanner.Text() 获取读取到的字符串。durationStr := scanner.Text()//使用 strconv.ParseFloat 将时长字符串转换为浮点数。duration, err := strconv.ParseFloat(durationStr, 64)//如果转换失败,则返回错误。if err != nil {return 0, err}//将浮点数时长转换为整数(秒),并返回,没有错误。return int(duration), nil}return 0, fmt.Errorf("no duration found")}// formatDurationSeconds 函数将秒数转换为分秒格式的字符串。
// 函数接收一个整数参数 seconds,表示时长(秒)。
// 函数返回一个字符串,表示时分秒格式的时长。
func formatDurationSeconds(seconds int) string {//计算时钟数,通过将总秒数除以3600。hours := seconds / 3600//计算分钟数,通过将总秒数除以60。minutes := (seconds % 3600) / 60//计算剩余的秒数,通过取总秒数除以60的余数。seconds = seconds % 60//根据秒数自动判断是否包含小时,并相应地格式化输出if hours > 0 {//根据秒数自动判断是否包含分钟,并相应地格式化输出if minutes > 0 {//使用 fmt.Sprintf 格式化分钟和秒数为 "MM:SS" 格式的字符串,并确保分钟和秒数都是两位数(不足两位时前面补0)。return fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds)} else {return fmt.Sprintf("%02d:%02d", hours, seconds)}} else if minutes > 0 {return fmt.Sprintf("%02d:%02d", minutes, seconds)} else {return fmt.Sprintf("00:%02d", seconds)}}
func main() {//定义音视频文件的路径,并替换为实际的文件路径。filePath := "/opt/www/nginx/html/pages/resource/input.mp3"//调用 getDuration 函数获取文件的时长(秒)。durationSeconds, err := getDuration(filePath)//如果在获取时长时发生错误,则打印错误并退出程序。if err != nil {fmt.Println("Error getting duration:", err)return}fmt.Println("Duration:", durationSeconds)//调用 formatDurationSeconds 函数将时长(秒)转换为时分秒格式的字符串。durationFormatted := formatDurationSeconds(durationSeconds)fmt.Printf("Duration: %s\n", durationFormatted)
}

相关文章:

Golang获取音视频时长信息

文章目录 一、工具简介二、使用golang获取时间长 一、工具简介 这些工具都是与多媒体处理和流媒体相关的开源工具,它们都属于 FFmpeg 多媒体框架。 FFmpeg 是一个用于处理多媒体内容(音频、视频、图像等)的命令行工具。它可以执行各种各样…...

LeetCode 面试经典150题 14.最长公共前缀

题目: 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 思路: 代码: class Solution {public String longestCommonPrefix(String[] strs) {if (strs.length 0) {return &…...

自注意力机制的理解

一、自注意力要解决什么问题 循环神经网络由于信息传递的容量以及梯度消失问题,只能建立短距离依赖关系。为了建立长距离的依赖关系,可以增加网络的层数或者使用全连接网络。但是全连接网络无法处理变长的输入序列,另外,不同的输…...

win10-误删winsock恢复方法

文件链接放在最前面 链接:https://pan.baidu.com/s/1i9X0HJJOfo63fbtOETc1Xw?pwdlfqx 提取码:lfqx 误删后应该还是可以正常连接网络的,但是重启过后直接以太网和wifi都是无法使用的。下图是我后面网络正常补充的图片 误删后是只有飞行模式…...

c#矩阵求逆

目录 一、矩阵求逆的数学方法 1、伴随矩阵法 2、初等变换法 3、分块矩阵法 4、定义法 二、矩阵求逆C#代码 1、伴随矩阵法求指定3*3阶数矩阵的逆矩阵 (1)伴随矩阵数学方法 (2)代码 (3)计算 2、对…...

array go 语言的数组 /切片

内存地址通过& package mainimport "fmt"func main() {var arr [2][3]int16fmt.Println(arr)fmt.Printf("arr的地址是: %p \n", &arr)fmt.Printf("arr[0]的地址是 %p \n", &arr[0])fmt.Printf("arr[0][0]的地址是 %p \n"…...

【Stable Diffusion】专栏介绍和文章索引(持续更新中)

目录 1 背景2 思考3 文章索引(持续更新中)3.1 入门3.2 初级3.3 中级3.3 高级 1 背景 最近开始学习AIGC,对Stable Diffusion比较感兴趣,所以新建了这个专栏,来记录自己在使用和学习Stable Diffusion的一些方法、资料以…...

RPC 快速入门

一、What 1)小故事 张三和李四都在同一个家公司负责商品交易的模块,两个人平时开发甚是紧密。 🙋🏻‍♂️ 张三:“李四,我这边一个商品下单了,但是付款数额不对,你帮我查下支付有没…...

使用Docker搭建Syslog-ng

Syslog-ng是一个可靠、多功能的日志管理系统,用于收集日志并将其转发到指定的日志分析工具。 使用Docker CLI方式搭建 步骤 1: 拉取Syslog-ng镜像 首先,需要从Docker Hub拉取Syslog-ng的官方镜像。 docker pull balabit/syslog-ng:latest步骤 2: 启动…...

使能 Linux 内核自带的 FlexCAN 驱动

一. 简介 前面一篇文章学习了 ALPHA开发板修改CAN的设备树节点信息,并加载测试过设备树文件,文件如下: ALPHA开发板修改CAN的设备树节点信息-CSDN博客 本文是学习使能 IMX6ULL的 CAN驱动,也就是通过内核配置来实现。 二. 使能…...

通过dbeaver链接dm8数据库

一、环境说明 windows 11 vmware 17 ubuntu 22 tt:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammytt:~$ docker info Client:Version: 24.0.5Context: d…...

Stable diffusion(四)

训练自己的Lora 【DataSet】【Lora trainer】【SD Lora trainer】 前置的知识 batch size:模型一次性处理几张图片。一次性多处理图片,模型能够综合捕捉多张图片的特征,最终的成品效果可能会好。但是处理多个batch size也意味着更大的显存…...

oracle 19c RAC补丁升级

1.停止集群件备份家目录 ----两节点分别操作 cd /u01/app/19.3.0/grid/bin/ crsctl stop crstar -zcvf /u01/app.tar.gz /u01/app/u01/app/19.0.0/grid/bin/crsctl start crs2.两节点 GI、DB OPatch 替换(都得执行) ----# 表示 root 用户,$…...

计算机视觉研究方向

计算机视觉是一个广泛且快速发展的领域,涵盖了多种研究方向和技术。主要的研究方向包括图像处理、目标检测与识别、图像生成、三维视觉、行为识别、深度学习与计算机视觉、多媒体分析、视频理解、风格化、全向视觉传感器等。这些研究方向和技术不断进步,…...

数据分析-Pandas分类数据的比较如何避坑

数据分析-Pandas分类数据的比较如何避坑 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表…...

P - Beat

题目分析 1.看数据范围&#xff0c;大概知道dfs能做 2.自0问题开始查找&#xff0c;确保之后每次查找到的问题的困难度均大于上一次 3.遍历所有情况再记录cnt即可 代码 #include <iostream> #include <algorithm> #include <cstdio> #include <cstring&…...

机器学习——GBDT算法

机器学习——GBDT算法 在机器学习领域&#xff0c;梯度提升决策树&#xff08;Gradient Boosting Decision Trees&#xff0c;简称GBDT&#xff09;是一种十分强大且常用的集成学习算法。它通过迭代地训练决策树来不断提升模型性能&#xff0c;是一种基于弱学习器的提升算法。…...

阿里二面:谈谈ThreadLocal的内存泄漏问题?问麻了。。。。

引言 ThreadLocal在Java多线程编程中扮演着重要的角色&#xff0c;它提供了一种线程局部存储机制&#xff0c;允许每个线程拥有独立的变量副本&#xff0c;从而有效地避免了线程间的数据共享冲突。ThreadLocal的主要用途在于&#xff0c;当需要为每个线程维护一个独立的上下文…...

IOS面试题编程机制 46-50

46. 阐述 Method Swizzle(黑魔法),什么情况下会使用?1). 在没有一个类的实现源码的情况下,想改变其中一个方法的实现,除了继承它重写、和借助类别重名方法暴力抢先之外,还有更加灵活的方法 Method Swizzle。 2). Method Swizzle 指的是改变一个已存在的选择器对应的实现…...

web表单标签与练习(3.18)

一、表单域 表单域是一个包含表单元素的区域。 在HTML标签中&#xff0c;< form >标签用于定义表单域&#xff0c;以实现用户信息和传递。 < form >会把它范围内的表单元素信息提交给服务器。 表单属性 action url地址 用于指定接收并处理表单数据的服务器程序的…...

告别EEPROM!用FRAM FM25W256给你的GD32F303项目做个不掉电的‘记事本’(附SPI配置避坑指南)

告别EEPROM&#xff01;用FRAM FM25W256给你的GD32F303项目做个不掉电的‘记事本’&#xff08;附SPI配置避坑指南&#xff09; 在嵌入式系统开发中&#xff0c;数据存储一直是个让人头疼的问题。想象一下&#xff0c;你花了几个月调试的工业控制器&#xff0c;因为一次意外断电…...

如何通过CMLM-仲景中医AI大模型解决传统中医诊疗现代化难题

如何通过CMLM-仲景中医AI大模型解决传统中医诊疗现代化难题 【免费下载链接】CMLM-ZhongJing 首个中医大语言模型——“仲景”。受古代中医学巨匠张仲景深邃智慧启迪&#xff0c;专为传统中医领域打造的预训练大语言模型。 The first-ever Traditional Chinese Medicine large …...

Python实战:利用imageio与PIL打造高效图片转视频工具

1. 为什么需要图片转视频工具&#xff1f; 在日常工作和生活中&#xff0c;我们经常会遇到需要将多张图片合成为视频的场景。比如制作产品演示视频、创建旅行相册、生成数据可视化动画等。手动使用视频编辑软件处理这些需求不仅效率低下&#xff0c;而且难以实现批量自动化处理…...

牛批了,大佬汉化版,非常实用

今天给大家推荐一款U盘容量检测工具&#xff0c;一款是注册表修复工具&#xff0c;有需要的小伙伴可以下载收藏。 第一款&#xff1a;validrive 市面上的U盘很多是假冒伪劣产品&#xff0c;有的U盘标着1T或者2T的存储空间&#xff0c;但实际上可能只有32G或者64G。 想要知道到底…...

C 语言程序调用 Pixel Dream Workshop?通过 REST API 实现跨语言集成

C 语言程序调用 Pixel Dream Workshop&#xff1f;通过 REST API 实现跨语言集成 1. 引言&#xff1a;当传统语言遇上AI绘画 在嵌入式系统和传统C语言项目中集成AI能力&#xff0c;听起来像是把两个不同时代的产物硬凑在一起。但实际情况是&#xff0c;这种组合正在创造令人惊…...

千问3.5-2B参数详解:max_new_tokens=192如何平衡响应长度与推理延迟?实测数据

千问3.5-2B参数详解&#xff1a;max_new_tokens192如何平衡响应长度与推理延迟&#xff1f;实测数据 1. 模型概述 千问3.5-2B是Qwen系列中的小型视觉语言模型&#xff0c;具备图片理解与文本生成双重能力。这个2B参数的轻量级模型特别适合需要快速响应的应用场景&#xff0c;…...

Pixel Script Temple多场景落地:政务宣传短视频、乡村振兴纪录片脚本生成

Pixel Script Temple多场景落地&#xff1a;政务宣传短视频、乡村振兴纪录片脚本生成 1. 专业剧本创作工具介绍 Pixel Script Temple&#xff08;像素剧本圣殿&#xff09;是一款基于Qwen2.5-14B-Instruct大模型深度优化的专业剧本创作工具。它将先进的AI推理能力与独特的8-B…...

PyTorch 2.8镜像基础教程:NumPy/Pandas数据预处理与torch.Tensor转换要点

PyTorch 2.8镜像基础教程&#xff1a;NumPy/Pandas数据预处理与torch.Tensor转换要点 1. 环境准备与快速验证 在开始数据预处理之前&#xff0c;我们需要先确认PyTorch环境已经正确配置并能够使用GPU加速。这个预装PyTorch 2.8的镜像已经为我们准备好了所有必要的组件。 1.1…...

OpenClaw移动办公:Qwen3-4B模型通过钉钉审批报销单

OpenClaw移动办公&#xff1a;Qwen3-4B模型通过钉钉审批报销单 1. 为什么选择OpenClaw处理报销流程&#xff1f; 去年夏天&#xff0c;我因为频繁出差积累了大量纸质发票&#xff0c;每次手工录入报销系统都要耗费整个下午。直到发现OpenClaw这个开源自动化框架&#xff0c;才…...

极简办公:OpenClaw+Qwen3.5-9B自动回复日常邮件模板

极简办公&#xff1a;OpenClawQwen3.5-9B自动回复日常邮件模板 1. 为什么需要邮件自动化助手 每天早晨打开邮箱&#xff0c;总能看到十几封格式雷同的咨询邮件——产品报价、技术支持、会议邀约……这些邮件80%的内容都可以用标准模板回复&#xff0c;但手动复制粘贴依然要耗…...