一、依赖
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.10</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<version>4.27.2</version>
</dependency>
二、Java代码
import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Frame;
public class CompressVideoBiz {
public static void main(String[] args) {
String inputFilePath = "C://alan//test//t1.mp4";
String outputFilePath = "C://alan//test//t2.mp4";
try {
compressVideo(inputFilePath, outputFilePath);
System.out.println("视频压缩完成!");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void compressVideo(String inputFilePath, String outputFilePath) throws Exception {
// 初始化帧抓取器
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFilePath);
grabber.start();
// 获取视频的宽度、高度和帧率
int width = grabber.getImageWidth();
int height = grabber.getImageHeight();
double frameRate = grabber.getFrameRate();
// 初始化帧记录器
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFilePath, width, height);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setFormat("mp4");
recorder.setFrameRate(5);
recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
//recorder.setVideoBitrate(1000000); // 设置视频比特率
recorder.start();
Frame frame;
while ((frame = grabber.grab()) != null) {
recorder.record(frame);
}
// 停止并释放资源
recorder.stop();
recorder.release();
grabber.stop();
grabber.release();
}
}