czt
2025-01-03 3e8e2bfdfbcf06659d7734d3e1cb63fd0f46c35d
src/main/java/com/fzzy/api/utils/FileUtils.java
@@ -1,9 +1,16 @@
package com.fzzy.api.utils;
import com.fzzy.data.ConfigData;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
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 java.io.ByteArrayOutputStream;
import java.io.File;
@@ -14,9 +21,10 @@
/**
 * 将文件转为二进制流工具类
 * @author czt
 *
 * @author czt
 */
@Slf4j
@Service(FileUtils.BEAN_ID)
public class FileUtils {
   public static final String BEAN_ID = "base.fileUtil";
@@ -27,6 +35,7 @@
   /**
    * 根据文件路径将文件转为二进制文件流字符串
     *
    * @param filePath:文件路径
    * @return
    */
@@ -37,6 +46,7 @@
   /**
    * 根据文件路径将文件转为二进制数组
     *
    * @param filePath:文件路径
    * @return
    */
@@ -64,6 +74,7 @@
   
   /**
    * 将二进制数组转为字符串
     *
    * @param byteArray
    * @return
    */
@@ -124,4 +135,63 @@
      }
      return basePath;
   }
    /**
     * 视频压缩
     *
     * @param source 源文件
     * @param target 目标文件
     * @param rate   压缩比
     */
    public static void compre(File source, File target, Integer rate) throws EncoderException {
        try {
            log.info("---------------开始压缩---------------");
            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("h254");
            //设置音频比特率,单位:b (比特率越高,清晰度/音质越好,当然文件也就越大 5600000 = 5600kb)
            // video.setBitRate(new Integer(5_600_000 / rate));
            video.setBitRate(10 / rate);
            // 设置视频帧率(帧率越低,视频会出现断层,越高让人感觉越连续),这里 除1000是为了单位转换
            video.setFrameRate(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);
            log.info("---------------结束压缩---------------");
            long end = System.currentTimeMillis();
            log.info("压缩前大小:" + source.length() + " 压缩后大小:" + target.length());
            log.info("压缩耗时:" + (end - start));
        } catch (EncoderException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }
}