之前做了一个资源库的小项目,因为上传资源文件包含视频等附件,所以就需要时用到这个功能。通过对视频截图,然后作为封面缩略图,达到美观效果。
首先呢,需要准备相关的jar包,之前我用的是低版本的1.4.2,后来就换成了高版本的1.5.9
因为我使用的是MyEclipse开发的,使用IDEA开发的可以参考其他博主的pom.xml依赖。
下面是1.5.9版本的
图片红框里的是linux和windows下的jar包(注:根据运行环境选择,否则会报错)
java.lang.NoClassDefFoundError: Could not initialize class org.bytedeco.javacpp.avutil
jar包下载
链接: https://pan.baidu.com/s/1yx2YnEmahEP0FsLvoj1z-w
提取码:0912
我使用的方法是:
- 通过java获取视频信息,使用FFmpeg方式截取视频第n帧生成图片
下面展示 java代码
。
FFmpegFrameGrabber ff = null;
try{//图片File targetFile = new File(logoAbsolutePath);//视频ff = new FFmpegFrameGrabber(yfResourceResource.getAbsolutePath());ff.start();int length = ff.getLengthInFrames();int j = 0;Frame f = null;while (j <= length) {// 去掉前5帧,避免出现全黑的图片,依自己情况而定f = ff.grabImage();if ((j > 5) && (f.image != null)) {break;}j++;}ImageIO.write(FrameToBufferedImage(f), "jpg", targetFile);ff.stop();//生成的封面缩略图路径 logourl:我自定义的地址coverPath = request.getContextPath() + "/" + logourl + YfTools.getSubString(yfResourceResource.getAnnexName(),0,yfResourceResource.getAnnexName().length()-4)+".jpg?logoFlg=1";}catch (Exception e) {log.error(e);
}finally {if(ff!=null){try {ff.close();} catch (Exception ex) {log.error(ex);}}ff = null;
}
上传资源成功后