package com.dji.sample.territory.utils; import ws.schild.jave.Encoder; import ws.schild.jave.EncoderException; import ws.schild.jave.MultimediaObject; import ws.schild.jave.encode.AudioAttributes; import ws.schild.jave.encode.EncodingAttributes; import ws.schild.jave.encode.VideoAttributes; import ws.schild.jave.info.VideoSize; import java.io.File; import java.io.IOException; public class VideoZipUtil { /** * 视频压缩 * @param sourceFile 需要压缩的原始视频文件 * @param bitRate 视频的比特率,用于控制视频的质量和文件大小 * @param audioBitRate 音频的比特率,用于控制音频的质量和文件大小 * @param width 压缩后视频的宽度 * @param height 压缩后视频的高度 */ public static File compressVideo(File sourceFile, int bitRate, int audioBitRate, int width, int height) { try { // 创建临时文件来保存压缩后的视频内容 File compressedFile = File.createTempFile("compressed_video", ".mp4"); // 创建音频属性 AudioAttributes audio = new AudioAttributes(); audio.setCodec("aac"); audio.setBitRate(audioBitRate); // 创建视频属性 VideoAttributes video = new VideoAttributes(); video.setCodec("h264"); video.setBitRate(bitRate); video.setSize(new VideoSize(width, height)); // 创建转码属性 EncodingAttributes attrs = new EncodingAttributes(); attrs.setAudioAttributes(audio); attrs.setVideoAttributes(video); // 进行视频转码 Encoder encoder = new Encoder(); encoder.encode(new MultimediaObject(sourceFile), compressedFile, attrs); // 返回压缩后的临时文件 return compressedFile; } catch (IOException | EncoderException e) { e.printStackTrace(); throw new IllegalArgumentException("视频压缩失败"); } } }