本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。 <groupId>com.googlecode.mp4parser</groupId> <artifactId>isoparser</artifactId> <version>1.1.22</version> </dependency>
package com.opensourceteams.modules.java.util.video;
import org.junit.Test;
import java.io.IOException;
import static org.junit.Assert.*;
public class VideoUtilTest {
    @Test
    public void getDuration() throws IOException {
        String path = "/Users/liuwen/Downloads/temp/语音测试文件/xiaoshizi.mp3" ;
      /*  String path = "/Users/liuwen/Downloads/temp/语音测试文件/xiaoshizi.mp4" ;
        String path = "/Users/liuwen/Downloads/temp/语音测试文件/xiaoshizi.wav" ;
        String path = "/Users/liuwen/Downloads/temp/语音测试文件/xiaoshizi.mov" ;
        String path = "/Users/liuwen/Downloads/temp/语音测试文件/xiaoshizi.m4a" ;*/
        long result = VideoUtil.getDuration(path);
        System.out.println(result);
package com.opensourceteams.modules.java.util.video;
import com.coremedia.iso.IsoFile;
import java.io.IOException;
public class VideoUtil {
     * 获取视频文件的播放长度(mp4、mov格式)
     * @param videoPath
     * @return 单位为毫秒
    public static long getMp4Duration(String videoPath) throws IOException {
        IsoFile isoFile = new IsoFile(videoPath);
        long lengthInSeconds =
                isoFile.getMovieBox().getMovieHeaderBox().getDuration() /
                isoFile.getMovieBox().getMovieHeaderBox().getTimescale();
        return lengthInSeconds;
     * 得到语音或视频文件时长,单位秒
     * @param filePath
     * @return
     * @throws IOException
    public static long getDuration(String filePath) throws IOException {
        String format = getVideoFormat(filePath);
        long result = 0;
        if("wav".equals(format)){
            result = AudioUtil.getDuration(filePath).intValue();
        }else if("mp3".equals(format)){
            result = AudioUtil.getMp3Duration(filePath).intValue();
        }else if("m4a".equals(format)) {
            result = VideoUtil.getMp4Duration(filePath);
        }else if("mov".equals(format)){
            result = VideoUtil.getMp4Duration(filePath);
        }else if("mp4".equals(format)){
            result = VideoUtil.getMp4Duration(filePath);
        return result;
     * 得到语音或视频文件时长,单位秒
     * @param filePath
     * @return
     * @throws IOException
    public static long getDuration(String filePath,String format) throws IOException {
        long result = 0;
        if("wav".equals(format)){
            result = AudioUtil.getDuration(filePath).intValue();
        }else if("mp3".equals(format)){
            result = AudioUtil.getMp3Duration(filePath).intValue();
        }else if("m4a".equals(format)) {
            result = VideoUtil.getMp4Duration(filePath);
        }else if("mov".equals(format)){
            result = VideoUtil.getMp4Duration(filePath);
        }else if("mp4".equals(format)){
            result = VideoUtil.getMp4Duration(filePath);
        return result;
     * 得到文件格式
     * @param path
     * @return
    public static String getVideoFormat(String path){
        return  path.toLowerCase().substring(path.toLowerCase().lastIndexOf(".") + 1);
package com.opensourceteams.modules.java.util.video;
import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.audio.mp3.MP3AudioHeader;
import org.jaudiotagger.audio.mp3.MP3File;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import java.io.File;
public class AudioUtil {
     * 获取语音文件播放时长(秒) 支持wav 格式
     * @param filePath
     * @return
    public static Float getDuration(String filePath){
            File destFile = new File(filePath);
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(destFile);
            AudioFormat format = audioInputStream.getFormat();
            long audioFileLength = destFile.length();
            int frameSize = format.getFrameSize();
            float frameRate = format.getFrameRate();
            float durationInSeconds = (audioFileLength / (frameSize * frameRate));
            return durationInSeconds;
        }catch (Exception e){
            e.printStackTrace();
            return 0f;
     * 获取mp3语音文件播放时长(秒) mp3
     * @param filePath
     * @return
    public static Float getMp3Duration(String filePath){
        try {
            File mp3File = new File(filePath);
            MP3File f = (MP3File) AudioFileIO.read(mp3File);
            MP3AudioHeader audioHeader = (MP3AudioHeader)f.getAudioHeader();
            return Float.parseFloat(audioHeader.getTrackLength()+"");
        } catch(Exception e) {
            e.printStackTrace();
            return 0f;
     * 获取mp3语音文件播放时长(秒)
     * @param mp3File
     * @return
    public static Float getMp3Duration(File mp3File){
        try {
            //File mp3File = new File(filePath);
            MP3File f = (MP3File) AudioFileIO.read(mp3File);
            MP3AudioHeader audioHeader = (MP3AudioHeader)f.getAudioHeader();
            return Float.parseFloat(audioHeader.getTrackLength()+"");
        } catch(Exception e) {
            e.printStackTrace();
            return 0f;
     * 得到pcm文件的毫秒数
     * pcm文件音频时长计算
     * 同图像bmp文件一样,pcm文件保存的是未压缩的音频信息。 16bits 编码是指,每次采样的音频信息用2个字节保存。可以对比下bmp文件用分别用2个字节保存RGB颜色的信息。 16000采样率 是指 1秒钟采样 16000次。常见的音频是44100HZ,即一秒采样44100次。 单声道: 只有一个声道。
     * 根据这些信息,我们可以计算: 1秒的16000采样率音频文件大小是 2*16000 = 32000字节 ,约为32K 1秒的8000采样率音频文件大小是 2*8000 = 16000字节 ,约为 16K
     * 如果已知录音时长,可以根据文件的大小计算采样率是否正常。
     * @param filePath
     * @return
    public static long getPCMDurationMilliSecond(String filePath) {
        File file = new File(filePath);
        //得到多少秒
        long second = file.length() / 32000 ;
        long milliSecond = Math.round((file.length() % 32000)   / 32000.0  * 1000 ) ;
        return second * 1000 + milliSecond;
1.可能是学历问题,因为学历是门槛,这是个硬伤,只有提升学历才能不被筛选掉;
2.可能是技能的问题,你是一份简历投递多家公司,而不是按照公司的需求来写简历的,所以公司压根就不跟你谈;
3.技术栈的问题,别人都写的精通某某技术栈,而你只敢写熟悉,所以被筛选;
4.招聘公司需求小,都开始上工,岗位还没有放出来,所以需要提前准备好,才能在众多面试者中,脱颖而出;
5.要想写出牛叉的简历,就需要过硬得到技能,没有技能就算你写上去,也是被淘汰掉,因为你压根就不会,所以还需一份牛叉的简历,按照上面的技术栈准备对应的技能;
                                愿天堂没有BUG(公众号同名)
            使用Java面向对象编写网络通信程序应用
            Elasticsearch Java API Client 开发
            手动部署Java Web环境(Alibaba Cloud Linux 2)
            搭建Java Web开发环境(Anolis OS)
            RocketMQ中使用Java客户端发送消息和消费的应用