java上传视频并且截取当前视频第一帧

悠悠 2023-02-26 12:29 114阅读 0赞

java上传视频并且截取当前视频第一帧

1.Maven依赖

  1. <!--截取视频第一帧-->
  2. <dependency>
  3. <groupId>org.bytedeco</groupId>
  4. <artifactId>javacpp</artifactId>
  5. <version>1.4.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.bytedeco</groupId>
  9. <artifactId>javacv</artifactId>
  10. <version>1.4.1</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.bytedeco.javacpp-presets</groupId>
  14. <artifactId>opencv-platform</artifactId>
  15. <version>3.4.1-1.4.1</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.bytedeco.javacpp-presets</groupId>
  19. <artifactId>ffmpeg-platform</artifactId>
  20. <version>3.4.2-1.4.1</version>
  21. </dependency>

2.FileImageUtil

  1. /** * Created by ls on 2020/7/15. */
  2. **
  3. * Created by ls on 2020/7/15.
  4. */
  5. public class FileImageUtil {
  6. /** * 获取指定视频的帧并保存为图片至指定目录 * @param filePath 视频存放的地址 例如:D:/ruoyi/uploadPath/avatar/123.mp4 * @param targetFilePath 截图存放的地址 D:/ruoyi/uploadPath/images * @param targetFileName 截图保存的文件名称 123 * @return 图片的地址 * @throws Exception */
  7. public static String executeCodecs(String filePath, String targetFilePath, String targetFileName) throws Exception {
  8. try{
  9. FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);
  10. ff.start();
  11. String rotate =ff.getVideoMetadata("rotate");
  12. Frame f;
  13. int i = 0;
  14. String fileName=null;
  15. while (i <1) {
  16. f =ff.grabImage();
  17. IplImage src = null;
  18. if(null !=rotate &&rotate.length() > 1) {
  19. OpenCVFrameConverter.ToIplImage converter =new OpenCVFrameConverter.ToIplImage();
  20. src =converter.convert(f);
  21. f =converter.convert(rotate(src, Integer.valueOf(rotate)));
  22. }
  23. fileName= doExecuteFrame(f, targetFilePath, targetFileName);
  24. i++;
  25. }
  26. ff.stop();
  27. return fileName;
  28. }catch (Exception e){
  29. e.printStackTrace();
  30. }
  31. return null;
  32. }
  33. /* * 旋转角度的 */
  34. public static IplImage rotate(IplImage src, int angle) {
  35. IplImage img = IplImage.create(src.height(), src.width(), src.depth(), src.nChannels());
  36. opencv_core.cvTranspose(src, img);
  37. opencv_core.cvFlip(img, img, angle);
  38. return img;
  39. }
  40. public static String doExecuteFrame(Frame f, String targetFilePath, String targetFileName) {
  41. if (null ==f ||null ==f.image) {
  42. return null;
  43. }
  44. Java2DFrameConverter converter =new Java2DFrameConverter();
  45. String imageMat ="jpg";
  46. String fileName =targetFilePath + "/" +targetFileName +"." +imageMat;
  47. BufferedImage bi =converter.getBufferedImage(f);
  48. System.out.println("width:" + bi.getWidth());//打印宽、高
  49. System.out.println("height:" + bi.getHeight());
  50. File file =new File(fileName);
  51. try {
  52. ImageIO.write(bi,imageMat,file);
  53. }catch (IOException e) {
  54. e.printStackTrace();
  55. }
  56. return fileName;
  57. }
  58. }

发表评论

表情:
评论列表 (有 0 条评论,114人围观)

还没有评论,来说两句吧...

相关阅读