引入文件(jave-native-win64 windows 64位系统
jave-native-linux64 linux 64位系统
按自己服务器系统来替换
)
ws.schild
jave-core
2.4.6
ws.schild
jave-native-win64
2.4.6
压缩视频 音频使用 libmp3lame 压缩,ios默认播放器播放会没有声音,还是使用aac
File source = new File("e:/视频/第八课.mp4");
File target = new File("e:/视频/第八课_ys.mp4"); long time = System.currentTimeMillis(); try {
MultimediaObject object = new MultimediaObject(source);
AudioInfo audioInfo = object.getInfo().getAudio();
AudioAttributes audio = new AudioAttributes();
audio.setCodec("aac"); if(audioInfo.getBitRate() > 128000){
audio.setBitRate(new Integer(128000));
}
audio.setChannels(audioInfo.getChannels()); if(audioInfo.getSamplingRate() > 48050){
audio.setSamplingRate(new Integer(48050));
}
VideoInfo videoInfo = object.getInfo().getVideo();
VideoAttributes video = new VideoAttributes();
video.setCodec("h264"); if(videoInfo.getBitRate() > 800000){
video.setBitRate(new Integer(800000));
} if(videoInfo.getFrameRate() > 20){
video.setFrameRate(new Integer(20));
} int width = videoInfo.getSize().getWidth(); int height = videoInfo.getSize().getHeight(); if(width > 1280){ float rat = (float) width / 1280;
video.setSize(new VideoSize(1280,(int)(height/rat)));
}
EncodingAttributes attr = new EncodingAttributes();
attr.setFormat("mp4");
attr.setAudioAttributes(audio);
attr.setVideoAttributes(video);
Encoder encoder = new Encoder();
encoder.encode(object, target, attr);
System.out.println("耗时:" + (System.currentTimeMillis() - time)/1000);
} catch (Exception e) {
e.printStackTrace();
}

获取视频某个帧的图片
long times = System.currentTimeMillis();
File source = new File("e:/视频/第八课_ys.mp4");
File target = new File("e:/视频/第八课_ys.png");
MultimediaObject object = new MultimediaObject(source); try {
VideoInfo videoInfo = object.getInfo().getVideo();
VideoAttributes video = new VideoAttributes();
video.setCodec("png");
video.setSize(videoInfo.getSize());
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("image2");
attrs.setOffset(3f);//设置偏移位置,即开始转码位置(3秒)
attrs.setDuration(0.01f);//设置转码持续时间(1秒) attrs.setVideoAttributes(video);
Encoder encoder = new Encoder();
encoder.encode(object,target,attrs);
} catch (EncoderException e) {
e.printStackTrace();
}
System.out.println("耗时:"+(System.currentTimeMillis() - times));
计算音频文件时长:File file = new File("视频或者音频");
MultimediaObject object = new MultimediaObject(file);
//这里就是计算的时长
long duration = object.getInfo().getDuration();