javacv 写mp4_javacv FFmpeg 视频压缩

时间:2025-02-16 09:16:13

;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