jave2 工具类的使用,使用信息的获取以及AVI转换为MP4

jave2 工具类的使用,使用信息的获取以及AVI转换为MP4

使用手册:http://www.sauronsoftware.it/projects/jave/manual.php
github地址: https://github.com/a-schild/jave2https://github.com/a-schild/jave2

maven仓库坐标:

<dependency>
 <groupId>ws.schild</groupId>
 <artifactId>jave-all-deps</artifactId>
 <version>2.7.3</version>
</dependency>
package com.XXX;

import ws.schild.jave.*;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.channels.FileChannel;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;

import static org.hibernate.validator.internal.util.Contracts.assertTrue;

/**
 * @Description: 视频文件的工具类
 */ 
public class VideoUtils {
	/**
	 * 测试功能
	 */ 
    public static void main(String[] args){
        Map<String, Object> voideMsg = getVideoMsg("C:\\Users\\权\\Desktop\\test.avi");
        System.out.println(voideMsg);
        videoConvertMP4("C:\\Users\\权\\Desktop\\test.avi", "C:\\Users\\权\\Desktop\\testMP4.mp4");
        Map<String, Object> voideMsg2 = getVideoMsg("C:\\Users\\权\\Desktop\\testMP4.mp4");
        System.out.println(voideMsg2);
    }

    /**
     * @Description: 将视频转换为MP4格式  未开发完成
     *
     * @param path  要转换的文件路径
     * @param targetPath  要保存的文件路径 ,如: C:\Users\权\Desktop\testMP4.mp4
     * @return 返回值 转化后的视频的路径
     */
    public static void videoConvertMP4(String path, String targetPath) {
        ConvertProgressListener listener = new ConvertProgressListener();
        try {
            File source = new File(path);
            File target = new File(targetPath);
            if (target.exists())
            {
                target.delete();
            }
            //设置音频属性
            AudioAttributes audio = new AudioAttributes();
            audio.setCodec("aac");
            audio.setBitRate(128000);
            audio.setSamplingRate(44100);
            audio.setChannels(2);

            // 设置视频属性
            VideoAttributes video = new VideoAttributes();
            video.setCodec("libx264");
            video.setBitRate(4000000);
            video.setFrameRate(15);

            // 设置编码格式
            EncodingAttributes attrs = new EncodingAttributes();
            attrs.setFormat("mp4");
            attrs.setAudioAttributes(audio);
            attrs.setVideoAttributes(video);

            // 进行编码,输出到本地
            Encoder encoder = new Encoder();
            encoder.encode(new MultimediaObject(source), target, attrs,listener);
            assertTrue(target.exists(), "输出文件丢失");
        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println("视频转换失败");
        }
    }

   /**
    * @Description: 获取视频文件的信息
    *
    * @param path 文件路径
    * @return map 保存视频文件的信息,时间,宽,高,大小,格式,
    */
    public static Map<String, Object> getVideoMsg(String path){
        Map<String, Object> map = new HashMap<String, Object>();
        File file = new File(path);
        FileChannel fc= null;
        String size = "";

        if(file != null){
            try {
                MultimediaObject object = new MultimediaObject(file);
                MultimediaInfo m = object.getInfo();
                long ls = m.getDuration(); // 毫秒
                map.put("millisecond", ls);
                map.put("timestamp", ls);
                // 格式化的时间 如 01:30:37
                DecimalFormat format=new DecimalFormat("00");
                String time = format.format(ls/3600000)+ ":" +format.format(ls/60000)+":"+format.format(((ls)/1000 - ls/60000 * 60));
                map.put("time", time);
                map.put("localtime", ls/60000+"分"+((ls)/1000 - ls/60000 * 60)+"秒"); // 本地时间:2分37秒
                FileInputStream fis = new FileInputStream(file);
                fc= fis.getChannel();
                BigDecimal fileSize = new BigDecimal(fc.size());
                size = fileSize.divide(new BigDecimal(1048576), 2, RoundingMode.HALF_UP) + "MB";
                map.put("height", m.getVideo().getSize().getHeight());
                map.put("width", m.getVideo().getSize().getWidth());
                map.put("size", size);
                map.put("format", m.getFormat());
            }catch (Exception e) {
                e.printStackTrace();
            }finally {
                if (null!=fc){
                    try {
                        fc.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return map;
    }
}

/**
 * @Description: 视频转换时的监听器
 *
 */
class ConvertProgressListener implements EncoderProgressListener {

    public ConvertProgressListener() {
        //code
    }

    public void message(String m) {
        //code
    }

    public void progress(int p) {
        //Find %100 progress
        double progress = p / 1000.00;
        System.out.println("转换进度:"+progress*100+"%");
    }

    public void sourceInfo(MultimediaInfo m) {
        //code
    }
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值