美文网首页
Java文件上传截取视频首图

Java文件上传截取视频首图

作者: 杨章隐 | 来源:发表于2020-02-04 22:12 被阅读0次

    依赖

            <!-- 获取视频第一帧依赖 -->
            <dependency>
                <groupId>org.bytedeco</groupId>
                <artifactId>javacpp</artifactId>
                <version>1.4.1</version>
            </dependency>
            <dependency>
                <groupId>org.bytedeco</groupId>
                <artifactId>javacv</artifactId>
                <version>1.4.1</version>
            </dependency>
            <dependency>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>opencv-platform</artifactId>
                <version>3.4.1-1.4.1</version>
            </dependency>
            <dependency>
                <groupId>org.bytedeco.javacpp-presets</groupId>
                <artifactId>ffmpeg-platform</artifactId>
                <version>3.4.2-1.4.1</version>
            </dependency>
    

    关于文件的操作的类(包含截取第一帧,详情看注释)

    /**
     * 
     * @ClassName:  FileUtil   
     * @Description: 文件管理 
     * @author: Zing
     * @date:   2019年12月11日 上午11:55:40      
     * @Copyright:
     */
    public class FileUtil {
        /**
         * 
         * @Title: getTempPath   
         * @Description: 生成视频的首帧图片方法
         * @author: Zing
         * @param: @param tempPath 生成首帧图片的文件地址
         * @param: @param filePath 传进来的线上文件
         * @param: @return
         * @param: @throws Exception      
         * @return: boolean      
         * @throws
         */
        public static boolean getTempPath(String tempPath, String filePath) throws Exception {
            File targetFile = new File(tempPath);
            if (!targetFile.getParentFile().exists()) {
                targetFile.getParentFile().mkdirs();
            }
            File file2 = new File(filePath);
            //判断文件是否为视频
            if(FileUtil.isVideo("filePath")) {
                if (file2.exists()) {
                    FFmpegFrameGrabber ff = new FFmpegFrameGrabber(file2);
                    ff.start();
                    int ftp = ff.getLengthInFrames();
                    int flag=0;
                    Frame frame = null;
                    while (flag <= ftp) {
                        //获取帧
                        frame = ff.grabImage();
                        //过滤前3帧,避免出现全黑图片
                        if ((flag>3)&&(frame != null)) {
                            break;
                        }
                        flag++;
                    }
                    if(ImageIO.write(FrameToBufferedImage(frame), "jpg", targetFile)) {
                        ff.close();
                        ff.stop();
                        return true;
                    }else {
                        ff.close();
                        ff.stop();
                        return false;
                    }
                    
                }
            }
            return false;
        }
        
        /***
         * 
         * @Title: FrameToBufferedImage   
         * @Description: 创建格式化BufferedImage对象
         * @author: Zing
         * @param: @param frame
         * @param: @return      
         * @return: RenderedImage      
         * @throws
         */
        private static RenderedImage FrameToBufferedImage(Frame frame) {
            //创建BufferedImage对象
            Java2DFrameConverter converter = new Java2DFrameConverter();
            BufferedImage bufferedImage = converter.getBufferedImage(frame);
            return bufferedImage;
        }
        
        /**
         * 
         * @Title: isVideo   
         * @Description:判断是不是视频
         * @author: Zing
         * @param: @param path 文件路径
         * @param: @return      
         * @return: boolean       true是视频 false非视频
         * @throws
         */
        public static boolean isVideo(String path) {
            List<String> typeList = new ArrayList<String>();
            typeList.add("mp4");
            typeList.add("flv");
            typeList.add("avi");
            typeList.add("rmvb");
            typeList.add("rm");
            typeList.add("wmv");
            //获取文件名和后缀
            String suffix = path.substring(path.lastIndexOf(".") + 1);
            for(String type : typeList) {
                if(type.toUpperCase().equals(suffix.toUpperCase())) {
                    return true;
                }
            }
            return false;
        }
        
        /**
         * 
         * @Title: isVideo   
         * @Description: 判断是不是图片
         * @author: Zing
         * @param: @param path 文件路径
         * @param: @return      
         * @return: boolean      true是图片 false非图片
         * @throws
         */
        public static boolean isImage(String path) {
            List<String> typeList = new ArrayList<String>();
            typeList.add("jpg");
            typeList.add("png");
            //获取文件名和后缀
            String suffix = path.substring(path.lastIndexOf(".") + 1);
            for(String type : typeList) {
                if(type.toUpperCase().equals(suffix.toUpperCase())) {
                    return true;
                }
            }
            return false;
        }
    }
    

    相关文章

      网友评论

          本文标题:Java文件上传截取视频首图

          本文链接:https://www.haomeiwen.com/subject/cxodxhtx.html