瀏覽代碼

引入 cn.reghao.jutil.media 包

reghao 2 年之前
父節點
當前提交
c58d2ccbd2

+ 5 - 7
dfs-store/pom.xml

@@ -43,6 +43,11 @@
             <artifactId>web</artifactId>
             <version>1.0.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>cn.reghao.jutil</groupId>
+            <artifactId>media</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
 
         <dependency>
             <groupId>cn.reghao.oss</groupId>
@@ -122,18 +127,11 @@
             <version>2.12.0</version>
         </dependency>
 
-        <dependency>
-            <groupId>org.sejda.imageio</groupId>
-            <artifactId>webp-imageio</artifactId>
-            <version>0.1.6</version>
-        </dependency>
-
         <dependency>
             <groupId>io.jsonwebtoken</groupId>
             <artifactId>jjwt</artifactId>
             <version>0.9.1</version>
         </dependency>
-
         <dependency>
             <groupId>javax.xml.bind</groupId>
             <artifactId>jaxb-api</artifactId>

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/model/po/VideoUrl.java

@@ -1,6 +1,6 @@
 package cn.reghao.dfs.store.model.po;
 
-import cn.reghao.dfs.store.util.media.MediaResolution;
+import cn.reghao.jutil.media.MediaResolution;
 import cn.reghao.jutil.jdk.db.BaseObject;
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 5 - 5
dfs-store/src/main/java/cn/reghao/dfs/store/task/ConvertTask.java

@@ -1,14 +1,14 @@
 package cn.reghao.dfs.store.task;
 
 import cn.reghao.dfs.store.service.ObjectNameService;
+import cn.reghao.jutil.media.FFmpegWrapper;
+import cn.reghao.jutil.media.model.MediaProps;
+import cn.reghao.jutil.media.model.VideoProps;
 import cn.reghao.oss.api.constant.VideoUrlType;
 import cn.reghao.dfs.store.db.mapper.VideoUrlMapper;
 import cn.reghao.dfs.store.model.po.VideoUrl;
-import cn.reghao.dfs.store.util.media.FFmpegWrapper;
-import cn.reghao.dfs.store.util.media.MediaQuality;
-import cn.reghao.dfs.store.util.media.MediaResolution;
-import cn.reghao.dfs.store.util.media.po.MediaProps;
-import cn.reghao.dfs.store.util.media.po.VideoProps;
+import cn.reghao.jutil.media.MediaQuality;
+import cn.reghao.jutil.media.MediaResolution;
 
 import java.io.File;
 import java.util.UUID;

+ 1 - 1
dfs-store/src/main/java/cn/reghao/dfs/store/task/ImageFileProcessor.java

@@ -8,7 +8,7 @@ import cn.reghao.dfs.store.service.ObjectNameService;
 import cn.reghao.dfs.store.service.PutObjectService;
 import cn.reghao.jutil.jdk.security.DigestUtil;
 import cn.reghao.dfs.store.model.po.ImageFile;
-import cn.reghao.dfs.store.util.media.ImageOps;
+import cn.reghao.jutil.media.ImageOps;
 import cn.reghao.oss.api.constant.UploadChannel;
 import org.springframework.stereotype.Service;
 

+ 6 - 6
dfs-store/src/main/java/cn/reghao/dfs/store/task/VideoFileProcessor.java

@@ -1,6 +1,9 @@
 package cn.reghao.dfs.store.task;
 
 import cn.reghao.dfs.store.db.repository.MediaRepository;
+import cn.reghao.jutil.media.model.AudioProps;
+import cn.reghao.jutil.media.model.MediaProps;
+import cn.reghao.jutil.media.model.VideoProps;
 import cn.reghao.oss.api.constant.UploadChannel;
 import cn.reghao.dfs.store.model.vo.ObjectProp;
 import cn.reghao.dfs.store.model.vo.ObjectResult;
@@ -8,15 +11,12 @@ import cn.reghao.dfs.store.service.FileStoreService;
 import cn.reghao.dfs.store.util.FileType;
 import cn.reghao.dfs.store.service.ObjectNameService;
 import cn.reghao.dfs.store.service.PutObjectService;
-import cn.reghao.dfs.store.util.media.po.AudioProps;
-import cn.reghao.dfs.store.util.media.po.VideoProps;
 import cn.reghao.jutil.jdk.security.DigestUtil;
 import cn.reghao.dfs.store.model.po.VideoFile;
 import cn.reghao.dfs.store.model.po.VideoUrl;
-import cn.reghao.dfs.store.util.media.FFmpegWrapper;
-import cn.reghao.dfs.store.util.media.MediaQuality;
-import cn.reghao.dfs.store.util.media.MediaResolution;
-import cn.reghao.dfs.store.util.media.po.MediaProps;
+import cn.reghao.jutil.media.FFmpegWrapper;
+import cn.reghao.jutil.media.MediaQuality;
+import cn.reghao.jutil.media.MediaResolution;
 import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;

+ 0 - 138
dfs-store/src/main/java/cn/reghao/dfs/store/util/media/FFmpegWrapper.java

@@ -1,138 +0,0 @@
-package cn.reghao.dfs.store.util.media;
-
-import cn.reghao.dfs.store.util.media.po.AudioProps;
-import cn.reghao.dfs.store.util.media.po.MediaProps;
-import cn.reghao.dfs.store.util.media.po.VideoProps;
-import cn.reghao.jutil.jdk.converter.DateTimeConverter;
-import cn.reghao.jutil.jdk.serializer.JsonConverter;
-import cn.reghao.jutil.jdk.shell.Shell;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-
-import java.time.LocalDateTime;
-
-/**
- * @author reghao
- * @date 2022-03-04 11:04:32
- */
-public class FFmpegWrapper {
-    private final static String ffprobe = "/usr/bin/ffprobe";
-    private final static String ffmpeg = "/usr/bin/ffmpeg";
-
-    public static MediaProps getMediaProps(String src) {
-        String cmd = String.format("%s -v quiet -print_format json -show_format -show_streams -i \"%s\"", ffprobe, src);
-        String result = Shell.execWithResult(cmd);
-        if (result != null) {
-            JsonObject jsonObject = JsonConverter.jsonToJsonElement(result).getAsJsonObject();
-            JsonArray streams = jsonObject.get("streams").getAsJsonArray();
-            AudioProps audioProps = null;
-            VideoProps videoProps = null;
-            for (JsonElement jsonElement : streams) {
-                JsonObject jsonObject1 = jsonElement.getAsJsonObject();
-                String codecType = jsonObject1.get("codec_type").getAsString();
-                if (codecType.equals("audio")) {
-                    String codecName = jsonObject1.get("codec_name").getAsString();
-                    String codecTagString = jsonObject1.get("codec_tag_string").getAsString();
-
-                    JsonElement bitRateElement = jsonObject1.get("bit_rate");
-                    double bitRate;
-                    if (bitRateElement == null) {
-                        bitRate = 0.0;
-                    } else {
-                        bitRate = bitRateElement.getAsDouble();
-                    }
-
-                    JsonElement durationElement = jsonObject1.get("duration");
-                    double duration;
-                    if (durationElement == null) {
-                        duration = 0;
-                    } else {
-                        duration = durationElement.getAsDouble();
-                    }
-                    audioProps = new AudioProps(codecName, codecTagString, bitRate, duration);
-                } else if (codecType.equals("video")) {
-                    String codecName = jsonObject1.get("codec_name").getAsString();
-                    String codecTagString = jsonObject1.get("codec_tag_string").getAsString();
-
-                    double bitRate;
-                    JsonElement biteRateElement = jsonObject1.get("bit_rate");
-                    if (biteRateElement == null) {
-                        bitRate = 0;
-                    } else {
-                        bitRate = biteRateElement.getAsDouble();
-                    }
-
-                    double duration;
-                    JsonElement durationElement = jsonObject1.get("duration");
-                    if (durationElement == null) {
-                        duration = 0;
-                    } else {
-                        duration = durationElement.getAsDouble();
-                    }
-
-                    double codedWidth = jsonObject1.get("coded_width").getAsDouble();
-                    double codedHeight = jsonObject1.get("coded_height").getAsDouble();
-                    videoProps = new VideoProps(codecName, codecTagString, bitRate, duration, codedWidth, codedHeight);
-                }
-            }
-
-            if (videoProps == null) {
-                return null;
-            }
-
-            JsonObject format = jsonObject.get("format").getAsJsonObject();
-            if (format.get("duration") != null) {
-                Double duration = format.get("duration").getAsDouble();
-                videoProps.setDuration(duration);
-            }
-
-            Long size = format.get("size").getAsLong();
-            if (format.get("bit_rate") != null) {
-                Double bitRate = format.get("bit_rate").getAsDouble();
-                videoProps.setBitRate(bitRate);
-            }
-
-            MediaProps mediaProps = new MediaProps(audioProps, videoProps);
-            JsonElement tagsElement = format.get("tags");
-            if (tagsElement != null) {
-                JsonObject tags = tagsElement.getAsJsonObject();
-                JsonElement jsonElement = tags.get("creation_time");
-                if (jsonElement != null) {
-                    String creationTime = jsonElement.getAsString();
-                    LocalDateTime localDateTime = DateTimeConverter.localDateTime(creationTime);
-                    mediaProps.setCreateTime(localDateTime);
-                }
-            }
-            return mediaProps;
-        }
-        return null;
-    }
-
-    public static int formatCovert(String src, String dest) {
-        String cmd = String.format("%s -y -i %s -c:a aac -c:v libx264 -f mp4 %s", ffmpeg, src, dest);
-        return Shell.exec(cmd);
-    }
-
-    public static int qualityCovert(String src, int width, int height, String dest) {
-        String audioBitRate = "128k";
-        String videoBitRate = "1500k";
-        String cmd = String.format("%s -i %s -s %sx%s -c:a aac -b:a %s -c:v libx264 -b:v %s -g 90 %s",
-                ffmpeg, src, width, height, audioBitRate, videoBitRate, dest);
-        return Shell.exec(cmd);
-    }
-
-    public static void mp4ToM3u8() {
-
-    }
-
-    public static void m3u8ToMp4(String dir, String videoId, String videoFilePath, String audioFilePath) throws Exception {
-        String mp4FilePath = String.format("%s/%s.mp4", dir, videoId);
-
-        StringBuilder sb = new StringBuilder();
-        sb.append("ffmpeg -i ").append(audioFilePath).append(" ")
-                .append("-i ").append(videoFilePath).append(" ")
-                .append("-codec copy ").append(mp4FilePath);
-        Shell.exec(sb.toString());
-    }
-}

+ 0 - 178
dfs-store/src/main/java/cn/reghao/dfs/store/util/media/ImageOps.java

@@ -1,178 +0,0 @@
-package cn.reghao.dfs.store.util.media;
-
-import javax.imageio.ImageIO;
-import javax.imageio.ImageReader;
-import javax.imageio.stream.ImageInputStream;
-import javax.imageio.stream.ImageOutputStream;
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.io.*;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * 对图像的操作
- *
- * @author reghao
- * @date 2021-08-04 16:26:13
- */
-public class ImageOps {
-    public static String getFormat(File file) {
-        try (ImageInputStream iis = ImageIO.createImageInputStream(file);) {
-            Iterator<ImageReader> iterator = ImageIO.getImageReaders(iis);
-            if ((iterator.hasNext())) {
-                ImageReader ir = iterator.next();
-                return ir.getFormatName();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return null;
-    }
-
-    public static byte[] convert2jpg(File srcFile) {
-        try (ImageInputStream iis = ImageIO.createImageInputStream(srcFile)) {
-            BufferedImage image = ImageIO.read(iis);
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
-            ImageIO.write(image, "jpg", ios);
-            return baos.toByteArray();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return new byte[0];
-    }
-
-    public static byte[] png2jpg(File srcFile) {
-        try {
-            BufferedImage image = ImageIO.read(srcFile);
-            BufferedImage result = new BufferedImage(
-                    image.getWidth(),
-                    image.getHeight(),
-                    BufferedImage.TYPE_INT_RGB);
-            result.createGraphics().drawImage(image, 0, 0, Color.WHITE, null);
-
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            ImageIO.write(result, "jpg", baos);
-            return baos.toByteArray();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return new byte[0];
-    }
-
-    public static Size info(InputStream in) throws IOException {
-        BufferedImage bi = ImageIO.read(in);
-        return new Size(bi.getWidth(), bi.getHeight());
-    }
-
-    public static byte[] jpg2webp(byte[] bytes) throws IOException {
-        BufferedImage bi = ImageIO.read(new ByteArrayInputStream(bytes));
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        ImageIO.write(bi, "webp", baos);
-        return baos.toByteArray();
-    }
-
-    public static Size info(File file) throws IOException {
-        BufferedImage bi = ImageIO.read(file);
-        return new Size(bi.getWidth(), bi.getHeight());
-    }
-
-    public static BufferedImage merge(List<BufferedImage> bufferedImages, boolean isVertical) {
-        int size = bufferedImages.size();
-        int[][] imageArray = new int[size][];
-        for (int i = 0; i < size; i++) {
-            int width = bufferedImages.get(i).getWidth();
-            int height = bufferedImages.get(i).getHeight();
-            imageArray[i] = new int[width*height];
-            imageArray[i] = bufferedImages.get(i).getRGB(0, 0, width, height, imageArray[i], 0, width);
-        }
-
-        int newHeight = 0, newWidth = 0;
-        for (BufferedImage bufferedImage : bufferedImages) {
-            if (!isVertical) {
-                // 横向拼接,height 不变,width 增加
-                newHeight = Math.max(newHeight, bufferedImage.getHeight());
-                newWidth += bufferedImage.getWidth();
-            } else {
-                // 纵向拼接,width 不变,height 增加
-                newWidth = Math.max(newWidth, bufferedImage.getWidth());
-                newHeight += bufferedImage.getHeight();
-            }
-        }
-
-        BufferedImage newImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
-        int width = 0, height = 0;
-        for (int i = 0; i < size; i++) {
-            if (!isVertical) {
-                // 横向拼接
-                newImage.setRGB(width, 0, bufferedImages.get(i).getWidth(), newHeight, imageArray[i], 0, bufferedImages.get(i).getWidth());
-                width += bufferedImages.get(i).getWidth();
-            } else {
-                // 纵向拼接
-                newImage.setRGB(0, height, newWidth, bufferedImages.get(i).getHeight(), imageArray[i], 0, newWidth);
-                height += bufferedImages.get(i).getHeight();
-            }
-        }
-
-        return newImage;
-    }
-
-    /**
-     * 缩小图片
-     *
-     * @param
-     * @return
-     * @date 2021-08-18 下午1:45
-     */
-    public static BufferedImage resize(BufferedImage srcImage, int size) {
-        int width = srcImage.getWidth()/size;
-        int height = srcImage.getHeight()/size;
-
-        BufferedImage newImage = new BufferedImage(width, height, srcImage.getType());
-        Graphics g = newImage.getGraphics();
-        g.drawImage(srcImage, 0, 0, width, height, null);
-        g.dispose();
-        return newImage;
-    }
-
-    public static BufferedImage resize(String imagePath, int size) throws IOException {
-        BufferedImage srcImage = ImageIO.read(new File(imagePath));
-        int width = srcImage.getWidth()/size;
-        int height = srcImage.getHeight()/size;
-
-        BufferedImage newImage = new BufferedImage(width, height, srcImage.getType());
-        Graphics g = newImage.getGraphics();
-        g.drawImage(srcImage, 0, 0, width, height, null);
-        g.dispose();
-        return newImage;
-    }
-
-    public static void saveImage(BufferedImage bufferedImage, String filePath) throws IOException {
-        ImageIO.write(bufferedImage, "jpg", new File(filePath));
-    }
-
-    public static void saveImage(ByteArrayOutputStream baos, String filePath) throws IOException {
-        BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(baos.toByteArray()));
-        ImageIO.write(bufferedImage, "jpg", new File(filePath));
-    }
-
-    public static class Size {
-        private final int width;
-        private final int height;
-
-        public Size(int width, int height) {
-            this.width = width;
-            this.height = height;
-        }
-
-        public int getWidth() {
-            return width;
-        }
-
-        public int getHeight() {
-            return height;
-        }
-    }
-}

+ 0 - 41
dfs-store/src/main/java/cn/reghao/dfs/store/util/media/MediaQuality.java

@@ -1,41 +0,0 @@
-package cn.reghao.dfs.store.util.media;
-
-/**
- * 视频质量
- *
- * @author reghao
- * @date 2022-08-05 10:06:08
- */
-public class MediaQuality {
-    /**
-     * @param
-     * @return
-     * @date 2022-08-18 下午2:25
-     */
-    public static MediaResolution getQuality(int width, int height) {
-        boolean horizontal = width > height;
-        MediaResolution[] arr = MediaResolution.values();
-        MediaResolution resolution = arr[0];
-        int currentAbs;
-        if (horizontal) {
-            currentAbs = Math.abs(height-arr[0].getHeight());
-            for (int i = 1; i < arr.length; i++) {
-                int currentAbs1 = Math.abs(height-arr[i].getHeight());
-                if (currentAbs1 < currentAbs) {
-                    currentAbs = currentAbs1;
-                    resolution = arr[i];
-                }
-            }
-        } else {
-            currentAbs = Math.abs(width-arr[0].getHeight());
-            for (int i = 1; i < arr.length; i++) {
-                int currentAbs1 = Math.abs(width-arr[i].getHeight());
-                if (currentAbs1 < currentAbs) {
-                    currentAbs = currentAbs1;
-                    resolution = arr[i];
-                }
-            }
-        }
-        return resolution;
-    }
-}

+ 0 - 55
dfs-store/src/main/java/cn/reghao/dfs/store/util/media/MediaResolution.java

@@ -1,55 +0,0 @@
-package cn.reghao.dfs.store.util.media;
-
-/**
- * 视频图像分辨率
- *
- * 横屏视频宽高比 = 16:9
- * 竖屏视频宽高比 = 9:16
- *
- * 横屏视频分辨率
- * 144p = 256x144
- * 288p = 512x288
- * 360p = 640x360
- * 480p = 854x480
- * 720p = 1280x720
- * 1080p = 1920x1080
- * 1440p(2k) = 2560x1440
- * 2160p(4k) = 3840x2160
- * 4320p(8k) = 7680×4320
- *
- * @author reghao
- * @date 2022-08-04 09:21:38
- */
-public enum MediaResolution {
-    p144("144p", 256, 144),
-    p288("288p", 512, 288),
-    p360("360p", 640, 360),
-    p480("480p", 854, 480),
-    p720("720p", 1280, 720),
-    p1080("1080p", 1920, 1080),
-    p1440("2k", 2560, 1440),
-    p2160("4k", 3840, 2160),
-    p4320("8k", 7680, 4320);
-
-    private final String quality;
-    private final int width;
-    private final int height;
-
-    MediaResolution(String quality, int width, int height) {
-        this.quality = quality;
-        this.width = width;
-        this.height = height;
-    }
-
-    public String getQuality() {
-        return quality;
-    }
-
-    public int getWidth() {
-        return width;
-    }
-
-    public int getHeight() {
-        return height;
-    }
-}

+ 0 - 17
dfs-store/src/main/java/cn/reghao/dfs/store/util/media/po/AudioProps.java

@@ -1,17 +0,0 @@
-package cn.reghao.dfs.store.util.media.po;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * @author reghao
- * @date 2023-03-28 10:07:48
- */
-@AllArgsConstructor
-@Getter
-public class AudioProps {
-    private String codecName;
-    private String codecTagString;
-    private Double bitRate;
-    private Double duration;
-}

+ 0 - 23
dfs-store/src/main/java/cn/reghao/dfs/store/util/media/po/MediaProps.java

@@ -1,23 +0,0 @@
-package cn.reghao.dfs.store.util.media.po;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.time.LocalDateTime;
-
-/**
- * @author reghao
- * @date 2023-03-28 10:07:59
- */
-@Getter
-@Setter
-public class MediaProps {
-    private AudioProps audioProps;
-    private VideoProps videoProps;
-    private LocalDateTime createTime;
-
-    public MediaProps(AudioProps audioProps, VideoProps videoProps) {
-        this.audioProps = audioProps;
-        this.videoProps = videoProps;
-    }
-}

+ 0 - 21
dfs-store/src/main/java/cn/reghao/dfs/store/util/media/po/VideoProps.java

@@ -1,21 +0,0 @@
-package cn.reghao.dfs.store.util.media.po;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @author reghao
- * @date 2023-03-28 10:07:53
- */
-@AllArgsConstructor
-@Setter
-@Getter
-public class VideoProps {
-    private String codecName;
-    private String codecTagString;
-    private Double bitRate;
-    private Double duration;
-    private Double codedWidth;
-    private Double codedHeight;
-}

+ 6 - 6
dfs-store/src/test/java/FileTest.java

@@ -1,9 +1,9 @@
-import cn.reghao.dfs.store.util.media.FFmpegWrapper;
-import cn.reghao.dfs.store.util.media.MediaQuality;
-import cn.reghao.dfs.store.util.media.MediaResolution;
-import cn.reghao.dfs.store.util.media.po.AudioProps;
-import cn.reghao.dfs.store.util.media.po.MediaProps;
-import cn.reghao.dfs.store.util.media.po.VideoProps;
+import cn.reghao.jutil.media.FFmpegWrapper;
+import cn.reghao.jutil.media.MediaQuality;
+import cn.reghao.jutil.media.MediaResolution;
+import cn.reghao.jutil.media.po.AudioProps;
+import cn.reghao.jutil.media.po.MediaProps;
+import cn.reghao.jutil.media.po.VideoProps;
 import cn.reghao.jutil.jdk.security.DigestUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;