Spring Boot 多媒体(音频/视频)文件处理FFmpegFrameGrabber 方法(例子:获取视频总时长)

1.pom.xml 坐标

       <dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.6</version></dependency>

2.FFmpegFrameGrabber类提供了多种方法来处理多媒体文件,以下是一些常用的方法

  1. start():开始抓取帧。在调用此方法之前,可以设置格式和选项,之后可以调用grab()方法来获取帧。
  2. stop():停止抓取帧。通常在完成帧的抓取后调用此方法来释放资源。
  3. getLengthInTime():获取视频的长度(以秒为单位)。这可以用来确定视频的总播放时间。
  4. getFrameRate():获取视频的帧率。这可以用来计算视频中每秒钟的帧数。
  5. setFormat(String format):设置要抓取的媒体格式,如"h264"等。
  6. setOption(String key, String value):设置选项,例如设置传输协议为"tcp"等。
  7. grab():从视频流中抓取一帧视频数据并返回。该方法返回值为Frame对象,表示抓取到的视频帧数据。如果抓取失败,该方法会抛出异常。
  8. getAudioChannels():获取音频通道的数量。这可以用来确定音频的声道数。
  9. getSampleRate():获取音频的采样率。这可以用来确定音频的采样频率。
  10. getAudioLength():获取音频的长度(以毫秒为单位)。这可以用来确定音频的总播放时间。
  11. getVideoWidth():获取视频的宽度。这可以用来确定视频的分辨率。
  12. getVideoHeight():获取视频的高度。这可以用来确定视频的分辨率。
  13. getImageWidth():获取图像的宽度。这可以用来确定图像的大小。
  14. getImageHeight():获取图像的高度。这可以用来确定图像的大小。
  15. getPixels():获取图像像素数据。这可以用来访问图像的每个像素值。
  16. isOpen():检查FFmpegFrameGrabber是否打开。如果已打开,则返回true;否则返回false。
  17. release():释放与FFmpegFrameGrabber关联的所有资源。这应该在完成使用后调用以避免内存泄漏。
  18. setImageSize(int width, int height):设置图像的大小。这可以用来调整图像的分辨率。
  19. setLocation(String location):设置媒体文件的位置。这可以用来指定要抓取的媒体文件的路径或URL。
  20. setSampleFormat(int format):设置音频采样格式。这可以用来指定音频数据的采样格式。
  21. setVideoBitrate(int bitrate):设置视频比特率。这可以用来控制视频的质量和文件大小。
  22. setAudioBitrate(int bitrate):设置音频比特率。这可以用来控制音频的质量和文件大小。
  23. setAudioChannels(int channels):设置音频通道数。这可以用来指定音频的声道数。
  24. setSampleRate(int rate):设置音频采样率。这可以用来指定音频的采样频率。
  25. setFormat(String format, int audioChannels, int sampleRate, int audioBitrate):设置要抓取的媒体格式以及相关的音频参数。这可以用来指定要抓取的媒体格式和音频属性。
  26. setVideoCodec(int codec):设置视频编解码器。这可以用来指定视频数据的编解码方式。
  27. setAudioCodec(int codec):设置音频编解码器。这可以用来指定音频数据的编解码方式。
  28. setDeinterlacing(boolean deinterlace):设置是否进行去隔行扫描。这可以用来控制是否对视频数据进行去隔行处理以提高画质。
  29. setStrict(boolean strict):设置是否严格遵循FFmpeg的语法规则。这可以用来控制是否对输入的媒体文件进行严格的格式检查和解析。
  30. setUseSDL(boolean useSDL):设置是否使用SDL库来进行媒体播放和抓帧操作。这可以用来控制是否使用SDL库来进行媒体播放和抓帧操作以提高性能和兼容性。
  31. setInputFormat(String format):设置输入流的格式。这可以用来指定输入流的格式以便正确解析和处理媒体数据。
  32. setOutputFormat(String format):设置输出流的格式。这可以用来指定输出流的格式以便正确写入和保存媒体数据。
  33. setInputBufferSize(int size):设置输入缓冲区的大小。这可以用来控制读取输入流时使用的缓冲区大小以提高性能和稳定性。
  34. setOutputBufferSize(int size):设置输出缓冲区的大小。这可以用来控制写入输出流时使用的缓冲区大小以提高性能和稳定性。
  35. setInputTimeout(int timeout):设置输入超时时间(以毫秒为单位)。这可以用来控制读取输入流时的超时时间以避免长时间等待或阻塞。
  36. setOutputTimeout(int timeout):设置输出超时时间(以毫秒为单位)。这可以用来控制写入输出流时的超时时间以避免长时间等待或阻塞。

以上是FFmpegFrameGrabber类提供的一些常用方法,通过这些方法可以实现对多媒体文件的读取、解析和处理。

3.代码使用tool工具类(下面的例子是获取视频总时长)

备注:业务逻辑需要根据自己的情况更改

public class VideoLong {public static String getVideoDuration(String videoPath) {double duration = 0;try (FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(videoPath)) {frameGrabber.start();//System.out.println(frameGrabber.getLengthInTime()/1000000);duration = frameGrabber.getLengthInTime()/1000000;frameGrabber.stop();} catch (FrameGrabber.Exception e) {e.printStackTrace();}return String.valueOf(duration);}
}

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

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

相关文章

主成分分析用于数据降维

主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种常用的数据降维算法。它通过线性变换将原始数据转化为一组互相不相关的主成分&#xff0c;这些主成分能够最大程度地保留原始数据的信息。 数据降维是为了减少数据集中的特征数量&#x…

家电工厂5G智能制造数字孪生可视化平台,推进家电工业数字化转型

家电5G智能制造工厂数字孪生可视化平台&#xff0c;推进家电工业数字化转型。随着科技的飞速发展&#xff0c;家电行业正迎来一场前所未有的数字化转型。在这场制造业数字化转型中&#xff0c;家电5G智能制造工厂数字孪生可视化平台扮演着至关重要的角色。本文将从数字孪生技术…

【数据库】数据库介绍

文章目录 一、数据库介绍二、SQL分类 一、数据库介绍 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便 数据库存…

提交数据加快百度搜索引擎收录

百度站长工具做了更新&#xff0c;百度收录的地址分享如下&#xff0c;新站点提交后&#xff0c;可以加快百度收录。 普通收录_加快网站内容抓取&#xff0c;快速提交数据工具_站长工具_网站支持_百度搜索资源平台普通收录工具可实时向百度推送数据&#xff0c;创建并提交site…

git 安装、创建仓库、常用命令、克隆下载、上传项目、删除分支 -- 一篇文章总结

一、git安装 1、git安装地址&#xff1a;https://git-scm.com/downloads 2、选择操作系统 3、安装自己系统对应的操作位数 4、等待下载完&#xff0c;一路next安装就可以了 5、安装完成后&#xff0c;在任意文件夹点击右键&#xff0c;看到下图说明安装成功 二、创建仓库 1…

云原生(二)、Docker基础

Docker Docker 是一种开源的容器化平台&#xff0c;用于开发、部署和运行应用程序。它允许开发者将应用程序及其所有依赖项打包到一个可移植的容器中&#xff0c;这个容器可以在任何支持 Docker 的环境中运行&#xff0c;无论是开发人员的个人笔记本电脑、测试环境、生产服务器…

ROS Kinetic通信编程:话题、服务、动作编程

文章目录 一、话题编程二、服务编程三、动作编程 接上篇&#xff0c;继续学习ROS通信编程基础 一、话题编程 步骤&#xff1a; 创建发布者 初始化ROS节点向ROS Master注册节点信息&#xff0c;包括发布的话题名和话题中的消息类型按照一定频率循环发布消息 创建订阅者 初始化…

stm32-编码器测速

一、编码器简介 编码电机 旋转编码器 A,B相分别接通道一和二的引脚&#xff0c;VCC&#xff0c;GND接单片机VCC&#xff0c;GND 二、正交编码器工作原理 以前的代码是通过触发外部中断&#xff0c;然后在中断函数里手动进行计次。使用编码器接口的好处就是节约软件资源。对于频…

从0开始回顾MySQL---事务四大特性

事务概述 事务是一个最小的工作单元。在数据库当中&#xff0c;事务表示一件完整的事儿。一个业务的完成可能需要多条DML语句共同配合才能完成&#xff0c;例如转账业务&#xff0c;需要执行两条DML语句&#xff0c;先更新张三账户的余额&#xff0c;再更新李四账户的余额&…

实现elasticsearch和数据库的数据同步

1. 数据同步 elasticsearch中的酒店数据来自于mysql数据库&#xff0c;因此mysql数据发生改变时&#xff0c;elasticsearch也必须跟着改变&#xff0c;这个就是elasticsearch与mysql之间的数据同步。 1.1. 思路分析 常见的数据同步方案有三种&#xff1a; 同步调用 异步通知…

面试题手撕篇

参考博客 开始之前&#xff0c;理解递归 手写 浅拷贝 function shallow(target){if(target instanceof Array){return [...resObj]}else{return Object.assign({},target);} }手写深拷贝 const _sampleDeepClone target > {// 补全代码return JSON.parse(JSON.stringify…

EtherCAT开源主站 IGH 介绍及主站伺服控制过程

目录 前言 IGH EtherCAT主站介绍 主要特点和功能 使用场景 SOEM 主站介绍 SOEM 的特点和功能 SOEM 的使用场景 IGH 主站 和 SOEM对比 1. 功能和复杂性 2. 资源消耗和移植性 3. 使用场景 EtherCAT 通信原理 EtherCAT主站控制伺服过程 位置规划模式 原点复归模式…

八股文打卡day32——数据库(9)

面试题&#xff1a;MySQL日志文件有哪几种&#xff1f; 我的回答&#xff1a; 1.undo log&#xff0c;撤销日志&#xff0c;是InnoDB存储引擎层面生成的日志&#xff0c;主要用于数据库事务的回滚和MVCC&#xff08;多版本并发控制&#xff09;。可以帮助数据库回滚到事务开启…

Flinkcdc通过catalog同步mysql数据到hologres的ods中

Flinkcdc通过catalog同步mysql数据到hologres的ods中大致分为以下几步: 配置Flink CDC 的MySQL catalog:CREATE CATALOG mysqlsource WITH (type = mysql,hostname = xxxx,port = xxxx,username = xxxx<

AcWing 4964.子矩阵

首先就是运用了暴力的思路&#xff0c;能够过个70%的数据&#xff0c;剩下的直接时间超时了&#xff0c;没办法优化了。 讲一下暴力的思路&#xff1a; 其实就是模拟而已&#xff0c;也就是看作想要找的矩阵为一个小窗口&#xff0c;然后不断移动的事而已。 #include<ios…

服务器远程端口故障应该如何解决并且避免

在信息化快速发展的今天&#xff0c;服务器作为支撑各类业务运行的核心设备&#xff0c;其稳定性对于企业的运营至关重要。然而&#xff0c;即使是最高端的服务器也难免会出现问题&#xff0c;其中“服务器远程端口故障”就是一个相对常见但又十分棘手的问题。德迅云安全今天就…

云计算 3月15号(linux的权限管理 进程管理 管道重定向 磁盘管理 文件查找 软件管理 计划任务 web服务器 配置文件)

一、走进Linux 服务器类型&#xff1a;塔式服务器、刀片式服务器、机架式服务器 服务器基建&#xff1a;云服务器、物理服务器、虚拟服务器、容器 操作系统&#xff1a;centos、ubuntu、debain、欧拉、龙蜥、银河麒麟、中标麒麟 # 修改时区 timedatectl set-timezone Asia/Shan…

Ansible非标记语言YAML与任务剧本Playbook

前言 上篇介绍了 Ansible 单模块&#xff08;AD-Hoc&#xff09;的相关内容Ansible自动化运维Inventory与Ad-Hoc-CSDN博客&#xff0c;Ad-Hoc 命令是一次性的、即时执行的命令&#xff0c;用于在远程主机上执行特定任务&#xff0c;这些命令通常用于快速执行简单的任务。当需要…

MS08-067 漏洞利用与安全加固

文章目录 环境说明1 MS08_067 简介2 MS08_067 复现过程3 MS08_067 安全加固 环境说明 渗透机操作系统&#xff1a;2024.1漏洞复现操作系统: Windows XP Professional with Service Pack 2- VL (English)安全加固复现操作系统&#xff1a;Windows XP Professional with Service …

C语言案例2,请编程序将“China“译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母,变为Glmre,持续更新~

一.题目 /* 请编程序将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。 例如,字母“A”后面第4个字母是“E”&#xff0c;用“E”代替“A”。因此,“China”应译为“Glmre”。 请编一程序,用赋初值的方法使cl,c2&#xff0c;c3,c4,c5 这5个变量的值分…