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.看数据范围,大概知道dfs能做 2.自0问题开始查找,确保之后每次查找到的问题的困难度均大于上一次 3.遍历所有情况再记录cnt即可 代码 #include <iostream> #include <algorithm> #include <cstdio> #include <cstring&…...
机器学习——GBDT算法
机器学习——GBDT算法 在机器学习领域,梯度提升决策树(Gradient Boosting Decision Trees,简称GBDT)是一种十分强大且常用的集成学习算法。它通过迭代地训练决策树来不断提升模型性能,是一种基于弱学习器的提升算法。…...
阿里二面:谈谈ThreadLocal的内存泄漏问题?问麻了。。。。
引言 ThreadLocal在Java多线程编程中扮演着重要的角色,它提供了一种线程局部存储机制,允许每个线程拥有独立的变量副本,从而有效地避免了线程间的数据共享冲突。ThreadLocal的主要用途在于,当需要为每个线程维护一个独立的上下文…...
IOS面试题编程机制 46-50
46. 阐述 Method Swizzle(黑魔法),什么情况下会使用?1). 在没有一个类的实现源码的情况下,想改变其中一个方法的实现,除了继承它重写、和借助类别重名方法暴力抢先之外,还有更加灵活的方法 Method Swizzle。 2). Method Swizzle 指的是改变一个已存在的选择器对应的实现…...
web表单标签与练习(3.18)
一、表单域 表单域是一个包含表单元素的区域。 在HTML标签中,< form >标签用于定义表单域,以实现用户信息和传递。 < form >会把它范围内的表单元素信息提交给服务器。 表单属性 action url地址 用于指定接收并处理表单数据的服务器程序的…...
告别EEPROM!用FRAM FM25W256给你的GD32F303项目做个不掉电的‘记事本’(附SPI配置避坑指南)
告别EEPROM!用FRAM FM25W256给你的GD32F303项目做个不掉电的‘记事本’(附SPI配置避坑指南) 在嵌入式系统开发中,数据存储一直是个让人头疼的问题。想象一下,你花了几个月调试的工业控制器,因为一次意外断电…...
如何通过CMLM-仲景中医AI大模型解决传统中医诊疗现代化难题
如何通过CMLM-仲景中医AI大模型解决传统中医诊疗现代化难题 【免费下载链接】CMLM-ZhongJing 首个中医大语言模型——“仲景”。受古代中医学巨匠张仲景深邃智慧启迪,专为传统中医领域打造的预训练大语言模型。 The first-ever Traditional Chinese Medicine large …...
Python实战:利用imageio与PIL打造高效图片转视频工具
1. 为什么需要图片转视频工具? 在日常工作和生活中,我们经常会遇到需要将多张图片合成为视频的场景。比如制作产品演示视频、创建旅行相册、生成数据可视化动画等。手动使用视频编辑软件处理这些需求不仅效率低下,而且难以实现批量自动化处理…...
牛批了,大佬汉化版,非常实用
今天给大家推荐一款U盘容量检测工具,一款是注册表修复工具,有需要的小伙伴可以下载收藏。 第一款:validrive 市面上的U盘很多是假冒伪劣产品,有的U盘标着1T或者2T的存储空间,但实际上可能只有32G或者64G。 想要知道到底…...
C 语言程序调用 Pixel Dream Workshop?通过 REST API 实现跨语言集成
C 语言程序调用 Pixel Dream Workshop?通过 REST API 实现跨语言集成 1. 引言:当传统语言遇上AI绘画 在嵌入式系统和传统C语言项目中集成AI能力,听起来像是把两个不同时代的产物硬凑在一起。但实际情况是,这种组合正在创造令人惊…...
千问3.5-2B参数详解:max_new_tokens=192如何平衡响应长度与推理延迟?实测数据
千问3.5-2B参数详解:max_new_tokens192如何平衡响应长度与推理延迟?实测数据 1. 模型概述 千问3.5-2B是Qwen系列中的小型视觉语言模型,具备图片理解与文本生成双重能力。这个2B参数的轻量级模型特别适合需要快速响应的应用场景,…...
Pixel Script Temple多场景落地:政务宣传短视频、乡村振兴纪录片脚本生成
Pixel Script Temple多场景落地:政务宣传短视频、乡村振兴纪录片脚本生成 1. 专业剧本创作工具介绍 Pixel Script Temple(像素剧本圣殿)是一款基于Qwen2.5-14B-Instruct大模型深度优化的专业剧本创作工具。它将先进的AI推理能力与独特的8-B…...
PyTorch 2.8镜像基础教程:NumPy/Pandas数据预处理与torch.Tensor转换要点
PyTorch 2.8镜像基础教程:NumPy/Pandas数据预处理与torch.Tensor转换要点 1. 环境准备与快速验证 在开始数据预处理之前,我们需要先确认PyTorch环境已经正确配置并能够使用GPU加速。这个预装PyTorch 2.8的镜像已经为我们准备好了所有必要的组件。 1.1…...
OpenClaw移动办公:Qwen3-4B模型通过钉钉审批报销单
OpenClaw移动办公:Qwen3-4B模型通过钉钉审批报销单 1. 为什么选择OpenClaw处理报销流程? 去年夏天,我因为频繁出差积累了大量纸质发票,每次手工录入报销系统都要耗费整个下午。直到发现OpenClaw这个开源自动化框架,才…...
极简办公:OpenClaw+Qwen3.5-9B自动回复日常邮件模板
极简办公:OpenClawQwen3.5-9B自动回复日常邮件模板 1. 为什么需要邮件自动化助手 每天早晨打开邮箱,总能看到十几封格式雷同的咨询邮件——产品报价、技术支持、会议邀约……这些邮件80%的内容都可以用标准模板回复,但手动复制粘贴依然要耗…...
