2024 java 使用jave压缩视频,一个工具类搞定

一、准备工作

准备一个要压缩的视频

二、导入pom依赖

       <dependency>
            <groupId>ws.schild</groupId>
            <artifactId>jave-all-deps</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>ws.schild</groupId>
            <artifactId>jave-core</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>ws.schild</groupId>
            <artifactId>jave-nativebin-win64</artifactId>
            <version>3.5.0</version>
        </dependency>

三、压缩工具类CompressUtils 

/**
*压缩工具类
*/  
public class CompressUtils {

public static void main(String[] args) throws EncoderException {
        // 压缩前文件路径
        File source = new File("D:\\项目素材\\2.mp4");
        // 压缩后的文件路径
        File target = new File("D:\\项目素材\\test.mp4");
        compre(source,target,1);
    }

    /**
     * 视频压缩
     * @param source 源文件
     * @param target 目标文件
     * @param rate 压缩比
     */
    public static void compre(File source , File target , Integer rate) throws EncoderException {
        try {
            System.out.println("---------------开始压缩---------------");
            long start = System.currentTimeMillis();

            // 音频编码属性配置
            AudioAttributes audio= new AudioAttributes();
            audio.setCodec("libmp3lame");
            // 设置音频比特率,单位:b (比特率越高,清晰度/音质越好,当然文件也就越大 56000 = 56kb)
            // audio.setBitRate(new Integer(56_000));
            audio.setBitRate(new Integer(10));
            // 设置重新编码的音频流中使用的声道数(1 =单声道,2 = 双声道(立体声))
            audio.setChannels(1);
            // 采样率越高声音的还原度越好,文件越大
            // audio.setSamplingRate(new Integer(44100));
            audio.setSamplingRate(new Integer(22050));
            // 视频编码属性配置
            VideoAttributes video=new VideoAttributes();
            // 设置编码
            video.setCodec("mpeg4");
            //设置音频比特率,单位:b (比特率越高,清晰度/音质越好,当然文件也就越大 5600000 = 5600kb)
            // video.setBitRate(new Integer(5_600_000 / rate));
            video.setBitRate(new Integer(10 / rate));

            // 设置视频帧率(帧率越低,视频会出现断层,越高让人感觉越连续),这里 除1000是为了单位转换
            video.setFrameRate(new Integer(15));


            // 编码设置
            EncodingAttributes attr=new EncodingAttributes();
            attr.setOutputFormat("mp4");
            attr.setAudioAttributes(audio);
            attr.setVideoAttributes(video);

            // 设置值编码
            Encoder ec = new Encoder();
            ec.encode(new MultimediaObject(source), target, attr);


            System.out.println("---------------结束压缩---------------");
            long end = System.currentTimeMillis();
            System.out.println("压缩前大小:"+source.length() + " 压缩后大小:" + target.length());
            System.out.println("压缩耗时:" + (end -start));

        } catch (EncoderException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }

    }
}

四、运行结果

压缩前

压缩后

五、参考文献

GitHub - a-schild/jave2: The JAVE (Java Audio Video Encoder) library is Java wrapper on the ffmpeg project

猜你喜欢

转载自blog.csdn.net/m0_47484034/article/details/138303667