视频下载并取得第一帧 java

纯记录
视频文件下载并获取第一帧

依赖

<dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>1.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>ffmpeg-platform</artifactId>
            <version>4.0.2-1.4.3</version>
        </dependency>

实例代码

import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;

import javax.imageio.ImageIO;
import javax.xml.stream.events.EndDocument;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class Mp4Utils {

    /**
     * 根据读取到的视频文件,获取视频中的每一帧图片
     *
     * @param video   视频文件 E:/video/video.mp4
     * @param picPath 图片的保存路径 E:/pic/
     */
    public static void getVideoPic(File video, String picPath) {
        // 1.根据一个视频文件,创建一个按照视频中每一帧进行抓取图片的抓取对象
        FFmpegFrameGrabber ff = new FFmpegFrameGrabber(video);
        // 2.创建一个帧-->图片的转换器
        Java2DFrameConverter converter = new Java2DFrameConverter();

        try {
            ff.start();
            // 3.先知道这个视频一共有多少帧
            int length = ff.getLengthInFrames();
            System.out.println("高度:" + ff.getImageHeight());
            System.out.println("宽度:" + ff.getImageWidth());
            System.out.println("帧率:" + ff.getFrameRate());
            System.out.println("总帧数:" + length);
            System.out.println("==========================================");
            System.out.println("图片抓取中...");

            // 4.读取视频中每一帧图片
            int cnt = 1;
            Frame frame;
            while (true) {
                frame = ff.grabFrame();

                if (frame == null) {
                    break;
                }

                if (frame.image == null) {
                    continue;
                }

                // 5.将获取的帧,存储为图片
                BufferedImage image = converter.getBufferedImage(frame);
                File picFile = new File(picPath, cnt + ".png");

                // 6.将图片保存到目标文件中
                ImageIO.write(image, "png", picFile);
                if (cnt % 100 == 0) {
                    System.out.println("前" + cnt + "张图片抓取完成;");
                }
                cnt++;

            }

            System.out.println("图片抓取完成。");
            ff.stop();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void getVideoPicFirst(File video, String picPath) {
        // 1.根据一个视频文件,创建一个按照视频中每一帧进行抓取图片的抓取对象
        FFmpegFrameGrabber ff = new FFmpegFrameGrabber(video);
        // 2.创建一个帧-->图片的转换器
        Java2DFrameConverter converter = new Java2DFrameConverter();

        try {
            ff.start();
            // 3.先知道这个视频一共有多少帧
            int length = ff.getLengthInFrames();
            System.out.println("高度:" + ff.getImageHeight());
            System.out.println("宽度:" + ff.getImageWidth());
            System.out.println("帧率:" + ff.getFrameRate());
            System.out.println("总帧数:" + length);
            System.out.println("==========================================");
            System.out.println("图片抓取中...");

            // 4.读取视频中每一帧图片
            Frame frame;
            frame = ff.grabFrame();

            if (frame == null) {
                return;
            }

            if (frame.image == null) {
                return;
            }

            // 5.将获取的帧,存储为图片
            BufferedImage image = converter.getBufferedImage(frame);
            File picFile = new File(picPath,   "第一帧.png");

            // 6.将图片保存到目标文件中
            ImageIO.write(image, "png", picFile);
            System.out.println("图片抓取完成");


            ff.stop();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String path = "/Users/frlyh/Documents/临时/mp4";

        File file = new File(path + "/AL9.mp4");
        getVideoPicFirst(file, path + "/图");
        System.out.println(" end ");

    }



}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值