;importlombok.extern.slf4j.Slf4j;;;;;;;/***@author* @date 2020/2/17
*
* Description:*/@Slf4jpublic classConvertVideo {private static final int FRAME_RATE = 30;private static final int VIDEO_BITRATE = 1048576;private static final int COMPRESS_WIDTH = 320;/*** 在使用时发现视频压缩和视频时长有关系
* 一个9M的56s的视频压缩后视频7M多
* 一个22M的5s的视频压缩后视频624K
*@paramfile
*@paramcheckCompress
*@return
*/
public staticString convert(File file, Boolean checkCompress) {
FFmpegFrameGrabber frameGrabber= newFFmpegFrameGrabber(());
String fileName= null;
Frame captured_frame= null;
FFmpegFrameRecorder recorder= null;try{
();
fileName= ().replace(".mp4", "_edited.mp4");
("wight:{},height:{}",(), ());int height =();int widht =();if(checkCompress &&needCompress(())){
height=calculateHeight((), (), COMPRESS_WIDTH);
widht=COMPRESS_WIDTH;
("new wight:{},height:{}",widht, height);
}
recorder= newFFmpegFrameRecorder(fileName, widht, height, ());
(FRAME_RATE);//下面这行打开就报错//(());
(());//(1);
("preset", "veryfast");//yuv420p,像素
(avutil.AV_PIX_FMT_YUV420P);
(avcodec.AV_CODEC_ID_H264);
(avcodec.AV_CODEC_ID_AAC);
("mp4");//比特//(VIDEO_BITRATE);
();while (true) {try{
captured_frame=();if (captured_frame == null) {
("!!! end cvQueryFrame");break;
}
(());
(captured_frame);
}catch(Exception e) {
}
}
();
();
();
}catch(Exception e) {
();
}//();
returnfileName;
}/*** 是否需要压缩,大于3MB
*@paramlength
*@return
*/
public static boolean needCompress(longlength){
("video size:{}", length);return length >= 3145728;
}/*** 等比计算新高度
*@paramw
*@paramh
*@paramnw
*@return
*/
private static int calculateHeight(int w, int h, intnw){double s = (h).doubleValue() /(w).doubleValue();int height = (int) (nw *s);//如果宽和高不是偶数();会报错
if(height % 2 !=0){
height+= 1;
}returnheight;
}
}
引入压缩视频的java依赖
javacv
1.4.3
javacpp
-presets
flycapture
-presets
libdc1394
-presets
libfreenect
-presets
libfreenect2
-presets
librealsense
-presets
videoinput
-presets
opencv
-presets
tesseract
-presets
leptonica
-presets
flandmark
-presets
artoolkitplus
javacv-platform
1.4.3
javacv
-presets
flycapture-platform
-presets
libdc1394-platform
-presets
libfreenect-platform
-presets
libfreenect2-platform
-presets
librealsense-platform
-presets
videoinput-platform
-presets
opencv-platform
-presets
tesseract-platform
-presets
leptonica-platform
-presets
flandmark-platform
-presets
artoolkitplus-platform