aix
2024-07-09 2aaaaf4598b869085ae35871de018cd35847c232
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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("视频压缩失败");
        }
    }
}