怎么使用7zip进行分批压缩_使用Java语言的Jave库对视频进行压缩

自己的服务器因为带宽限制,无法流畅播放更大的视频文件。需要对视频文件进行压缩到可以流畅播放的大小。

经过我长时间的资料搜索,还真的找到了,下面就进入正题。

一、依赖的库:

1、jave-core

2、jave-nativebin-osx64 或 jave-nativebin-win64 或 jave-nativebin-linux64。这个库根据不同的操作系统类型你需要导入不同的库。

二、上代码:

            MultimediaObject object = new MultimediaObject(source);            AudioInfo audioInfo = object.getInfo().getAudio();            // 根据视频大小来判断是否需要进行压缩,            int maxSize = 100;            double mb = Math.ceil(source.length()/ 1048576);            int second = (int)object.getInfo().getDuration()/1000;            BigDecimal bd = new BigDecimal(String.format("%.4f", mb/second));            System.out.println("开始压缩视频了--> 视频每秒平均 "+ bd +" MB ");            // 视频 > 100MB, 或者每秒 > 0.5 MB 才做压缩, 不需要的话可以把判断去掉            boolean temp = mb > maxSize || bd.compareTo(new BigDecimal(0.5)) > 0;            if(temp){                long time = System.currentTimeMillis();                //TODO 视频属性设置//                int maxBitRate = 128000;                int maxBitRate = 96000;                int maxSamplingRate = 44100;//                int bitRate = 800000;                int bitRate = 600000;                int maxFrameRate = 20;                int maxWidth = 1280;                AudioAttributes audio = new AudioAttributes();                // 设置通用编码格式                audio.setCodec("aac");                // 设置最大值:比特率越高,清晰度/音质越好                // 设置音频比特率,单位:b (比特率越高,清晰度/音质越好,当然文件也就越大 128000 = 182kb)                if(audioInfo.getBitRate() > maxBitRate){                    audio.setBitRate(new Integer(maxBitRate));                }                // 设置重新编码的音频流中使用的声道数(1 =单声道,2 = 双声道(立体声))。如果未设置任何声道值,则编码器将选择默认值 0。                audio.setChannels(audioInfo.getChannels());                // 采样率越高声音的还原度越好,文件越大                // 设置音频采样率,单位:赫兹 hz                // 设置编码时候的音量值,未设置为0,如果256,则音量值不会改变                // audio.setVolume(256);                if(audioInfo.getSamplingRate() > maxSamplingRate){                    audio.setSamplingRate(maxSamplingRate);                }                //TODO 视频编码属性配置                VideoInfo videoInfo = object.getInfo().getVideo();                VideoAttributes video = new VideoAttributes();                video.setCodec("h264");                //设置音频比特率,单位:b (比特率越高,清晰度/音质越好,当然文件也就越大 800000 = 800kb)                if(videoInfo.getBitRate() > bitRate){                    video.setBitRate(bitRate);                }                // 视频帧率:15 f / s  帧率越低,效果越差                // 设置视频帧率(帧率越低,视频会出现断层,越高让人感觉越连续),视频帧率(Frame rate)是用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(Frames per Second,简:FPS)或“赫兹”(Hz)。                if(videoInfo.getFrameRate() > maxFrameRate){                    video.setFrameRate(maxFrameRate);                }                // 限制视频宽高                int width = videoInfo.getSize().getWidth();                int height = videoInfo.getSize().getHeight();                if(width > maxWidth){                    float rat = (float) width / maxWidth;                    video.setSize(new VideoSize(maxWidth,(int)(height/rat)));                }                EncodingAttributes attr = new EncodingAttributes();                attr.setFormat("mp4");                attr.setAudioAttributes(audio);                attr.setVideoAttributes(video);                // 速度最快的压缩方式, 压缩速度 从快到慢: ultrafast, superfast, veryfast, faster, fast, medium,  slow, slower, veryslow and placebo.//                attr.setPreset(PresetUtil.VERYFAST);//                attr.setCrf(27);//                // 设置线程数//                attr.setEncodingThreads(Runtime.getRuntime().availableProcessors()/2);                Encoder encoder = new Encoder();                encoder.encode(new MultimediaObject(source), target, attr);                System.out.println("压缩总耗时:" + (System.currentTimeMillis() - time)/1000);                return target;            }      

三、压缩结果:

一个84M的视频会被压缩至6.4兆。

压缩前:

407365aa013394c157a7f4f4f172b3c3.png

压缩后:

678f32a10f5199c8c11d9b3ca188c942.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值