java获取音频文件播放时长
方法一:
在项目开发过程中,需要获取音视频文件时长。查询资料后发现 JAVE能够完美得到想要的结果,JAVE项目简介如下:
The JAVE (Java Audio Video Encoder) library is Java wrapper on the ffmpeg project. Developers can take take advantage of JAVE to transcode audio and video files from a format to another. In example you can transcode an AVI file to a MPEG one, you can change a DivX video stream into a (youtube like) Flash FLV one, you can convert a WAV audio file to a MP3 or a Ogg Vorbis one, you can separate and transcode audio and video tracks, you can resize videos, changing their sizes and proportions and so on. Many other formats, containers and operations are supported by JAVE.
总的来说JAVE不仅能够获取音视频文件时长,而且能够在代码中将音视频进行格式转换,可以说功能很强大了,我暂时只用到获取时长这一最简单的功能。
首先,下载jar包,点此下载;
然后,通过maven进行安装(首先确保电脑已经配置好maven环境变量):
步骤:1.进入maven仓库目录,一般目录为C:\Users\Administrator\.m2\repository,亦可自己创建仓库,创建后需要在maven的conf目录下修改settings.xml文件中的localRepository的配置;
2.将jave-1.0.2.jar包复制到仓库目录下;
3.win键 + R 打开运行对话框,输入cmd进入Command,进入仓库目录,执行以下命令:
mvn install:install-file -Dfile=jave-1.0.2.jar -DgroupId=jave -DartifactId=jave -Dversion=1.0.2 -Dpackaging=jar -DgeneratePom=true
然后在maven项目中就可以通过maven导入jar包了。
简单的测试用例:
package com.jave;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.MultimediaInfo;
import java.io.File;
public class ReadVideo {
public static void main(String[] args) {
File source = new File("E:\\测试视频\\R41.avi");
Encoder encoder = new Encoder();
try {
MultimediaInfo m = encoder.getInfo(source);
long ls = m.getDuration();
int second = ls \ 1000;
System.out.println("此视频时长为:" + second + "秒!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
转自https://blog.csdn.net/xie_sining/article/details/79643152
方法二:
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import java.io.File;
import java.net.URL;
import java.util.Date; /**
* @author liuziw
* @date 2019/8/21 9:17
*/
public class AudioTimeTest { /**
* 获取音频文件时长
*
* @param wavFilePath wav文件路径,支持本地和网络HTTP路径
* @return 时长/微秒,可 /1000000D 得到秒
* @throws Exception
*/
public static long getMicrosecondLengthForWav(String wavFilePath) throws Exception { if (wavFilePath == null || wavFilePath.length() == 0) {
return 0;
}
String bath = wavFilePath.split(":")[0];
Clip clip = AudioSystem.getClip();
AudioInputStream ais;
if ("http".equals(bath.toLowerCase())||"https".equals(bath.toLowerCase())) {
ais = AudioSystem.getAudioInputStream(new URL(wavFilePath));
} else {
ais = AudioSystem.getAudioInputStream(new File(wavFilePath));
}
clip.open(ais);
return clip.getMicrosecondLength();
} public static void main(String [] args)throws Exception {
Long start = new Date().getTime();
String url = "";
Long time = getMicrosecondLengthForWav(url)/1000000;
Long end = new Date().getTime();
System.out.println("花费(毫秒)"+(end-start));
System.out.println("时长为(秒)"+time); }
}
java获取音频文件播放时长的更多相关文章
- C# 获取媒体文件播放时长
引用: Interop.Shell32.dll 方法: /// <summary> /// 获取媒体文件播放时长 /// </summary> /// <param na ...
- c#获取Amr文件的时长(毫秒)亲测有效
/// <summary> /// c#获取Amr文件的时长(毫秒) /// </summary> /// <param name="fileName" ...
- Java获取音频文件(MP3)的播放时长
最近的一个项目需要按照时间播放mp3文件,例如,播放10分钟的不同音乐. 这就意味着我得事先知道mp3文件的播放时长,以决定播放几遍这个文件. 方案一:Java的方式 找第三方的库,真的感谢这些提供j ...
- java 获取音频文件时长
需要导入jar包:jave 1.0.2 jar 如果是maven项目,在pom.xml文件中添加: <dependency> <groupId>it.sauronsoftwar ...
- js获取video的播放时长
setTimeout(function () { var vid = document.getElementById("videoIntro"); var currentTim ...
- java切割音频文件
工具: 一个jar包即可:jave-1.0.2.jar 可以切割wav格式的音频文件 完整工程目录 就一个jar包,一个main类 代码: package com.zit; import java.i ...
- Shell32.ShellClass服务器操作系统无法获取 音频文件时长问题
前言: 上传音频文件,自动写入此音频文件的时长,这里用 COM组件Microsoft Shell Controls And Automation来实现. 首先 1.引用:Microsoft Shell ...
- video.js不能控制本地视频或者音频播放时长
问题: 把视频放到本地,然后对视频进行测试,想要控制视频或者音频的播放时长,没办法做到,每次拉动进度条,都会使得本地视频重新播放 原因: 所有浏览器默认js无法访问本地地址,也就是说js不能对本地文件 ...
- java获取Mp3播放时长
最近有一个用java获取mp3播放时长的需求,有两种,一种本地文件,一种网络文件,其中获取网络mp3播放时间的方法找了挺久终于找到个能用的了. 第一种很简单,下载个jar包 jaudiotagger ...
随机推荐
- Python:Django 项目中可用的各种装备和辅助
1 Redis 数据库 2 MySQL 数据库 3 前端服务器 live-server 4 定时任务 django-crontab扩展 5 Docker 容器 --用来运行 FastDFS 分布式文件 ...
- jQuery I
jQuery 两大特点: 链式编程:比如.show()和.html()可以连写成.show().html(). 隐式迭代:隐式对应的是显式.隐式迭代的意思是:在方法的内部进行循环遍历,而不用我们自己再 ...
- 【VS开发】进程线程及堆栈关系的总结
进程线程及堆栈关系的总结 突然想到进程的栈和线程的栈,就顺便说一下,线程的栈被自动分配到进程的内存空间中 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性. ...
- Laravel关联模型
public $timestamps = false;//不存时间 1.多对多关联.如收藏.用户表users,产品表products,收藏中间表user_favorite_products.那么在用户 ...
- java 寻找水仙花数
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153=1 ...
- [转贴]Linux内核LTS长期支持版生命周期
Linux内核LTS长期支持版生命周期 https://blog.51cto.com/dangzhiqiang/1894026 搞不懂长期支持版本的特点和区别. 党志强关注0人评论4371人阅读201 ...
- Hive怎么使用远程连接
HIVE的连接模式== 本地连接模式 直接启动hive命令 HIVE的远程连接 这里要启动HIVE的服务 thirft进行编写 hiveserver2 —- > 前台启动 后台启动 前台启动 h ...
- 第k小团(Bitset+bfs)牛客第二场 -- Kth Minimum Clique
题意: 给你n个点的权值和连边的信息,问你第k小团的值是多少. 思路: 用bitset存信息,暴力跑一下就行了,因为满足树形结构,所以bfs+优先队列就ok了,其中记录下最后进入的点(以免重复跑). ...
- MySQL_入手<二>之删--改--查
接上 上篇文章继续 查询 # 比较运算 # 根据WHERE条件查找数据: = > < >= <= != select * from t_hero where age < ...
- python进程之间的通信——Queue
我们知道进程之间的数据是互不影响的,但有时我们需要在进程之间通信,那怎么办呢? 认识Queue 可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个消息 ...