java获取视频第一帧,指定帧数图片

1.需要用到的jar包,2jar包版本有关联,所以尽量保持一致

<!-- https://mvnrepository.com/artifact/org.bytedeco/javacv -->
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv</artifactId>
    <version>1.5.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/ffmpeg -->
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>ffmpeg-platform</artifactId>
    <version>4.1.3-1.5.1</version>
</dependency>

2.util类

import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.InputStream;

public class VideoUtil {
    public static String getVideoFirstImg(String path)throws Exception {
        Frame frame = null;
       //构造器支持InputStream,可以直接传MultipartFile.getInputStream()
        FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber(path);
        //开始播放
        fFmpegFrameGrabber.start();
        //获取视频总帧数
        int ftp = fFmpegFrameGrabber.getLengthInFrames();
        //指定第几帧
        fFmpegFrameGrabber.setFrameNumber(5);
        //获取指定第几帧的图片
        frame = fFmpegFrameGrabber.grabImage();
        //文件绝对路径+名字
        String fileName = "D:/upload/video/2019/08/24/first.jpg";
        File outPut = new File(fileName);
        ImageIO.write(FrameToBufferedImage(frame), "jpg", outPut);
        return fileName;
    }

    public static String getVideoLastImg(String path)throws Exception {
        Frame frame = null;
        FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber(path);
        //开始播放
        fFmpegFrameGrabber.start();
        //获取视频总帧数
        int ftp = fFmpegFrameGrabber.getLengthInFrames();
        //指定第几帧
        fFmpegFrameGrabber.setFrameNumber(ftp - 1);
        //获取指定第几帧的图片
        frame = fFmpegFrameGrabber.grabImage();
        String fileName = "D:/upload/video/2019/08/24/last.jpg";
        File outPut = new File(fileName);
        ImageIO.write(FrameToBufferedImage(frame), "jpg", outPut);
        return fileName;
    }

    public static BufferedImage FrameToBufferedImage(Frame frame) {
        Java2DFrameConverter converter = new Java2DFrameConverter();
        BufferedImage bufferedImage = converter.getBufferedImage(frame);
        return bufferedImage;
    }

    public static void main(String[] args) throws Exception{
        String videoFileName = "D:/upload/video/2019/08/24/1566612136457_DF78ACE70A68CB0EB734FA02387C3886.mp4";
        System.out.println(getVideoLastImg(videoFileName));
    }

}
发布了77 篇原创文章 · 获赞 21 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/f1370335844/article/details/100050336
今日推荐