一、准备工作
准备一个要压缩的视频
二、导入pom依赖
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-all-deps</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-core</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-nativebin-win64</artifactId>
<version>3.5.0</version>
</dependency>
三、压缩工具类CompressUtils
/**
*压缩工具类
*/
public class CompressUtils {
public static void main(String[] args) throws EncoderException {
// 压缩前文件路径
File source = new File("D:\\项目素材\\2.mp4");
// 压缩后的文件路径
File target = new File("D:\\项目素材\\test.mp4");
compre(source,target,1);
}
/**
* 视频压缩
* @param source 源文件
* @param target 目标文件
* @param rate 压缩比
*/
public static void compre(File source , File target , Integer rate) throws EncoderException {
try {
System.out.println("---------------开始压缩---------------");
long start = System.currentTimeMillis();
// 音频编码属性配置
AudioAttributes audio= new AudioAttributes();
audio.setCodec("libmp3lame");
// 设置音频比特率,单位:b (比特率越高,清晰度/音质越好,当然文件也就越大 56000 = 56kb)
// audio.setBitRate(new Integer(56_000));
audio.setBitRate(new Integer(10));
// 设置重新编码的音频流中使用的声道数(1 =单声道,2 = 双声道(立体声))
audio.setChannels(1);
// 采样率越高声音的还原度越好,文件越大
// audio.setSamplingRate(new Integer(44100));
audio.setSamplingRate(new Integer(22050));
// 视频编码属性配置
VideoAttributes video=new VideoAttributes();
// 设置编码
video.setCodec("mpeg4");
//设置音频比特率,单位:b (比特率越高,清晰度/音质越好,当然文件也就越大 5600000 = 5600kb)
// video.setBitRate(new Integer(5_600_000 / rate));
video.setBitRate(new Integer(10 / rate));
// 设置视频帧率(帧率越低,视频会出现断层,越高让人感觉越连续),这里 除1000是为了单位转换
video.setFrameRate(new Integer(15));
// 编码设置
EncodingAttributes attr=new EncodingAttributes();
attr.setOutputFormat("mp4");
attr.setAudioAttributes(audio);
attr.setVideoAttributes(video);
// 设置值编码
Encoder ec = new Encoder();
ec.encode(new MultimediaObject(source), target, attr);
System.out.println("---------------结束压缩---------------");
long end = System.currentTimeMillis();
System.out.println("压缩前大小:"+source.length() + " 压缩后大小:" + target.length());
System.out.println("压缩耗时:" + (end -start));
} catch (EncoderException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}