美文网首页
java-FFmpeg1.4.4读取视频随机截图

java-FFmpeg1.4.4读取视频随机截图

作者: 吹奏一池春水 | 来源:发表于2019-03-12 23:40 被阅读0次
package per.qy.dexter.video;
 
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
 
import javax.imageio.ImageIO;
 
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.junit.Test;
 
public class FFmpegTest {
 
    @Test
    public void splitVideo() {
        FFmpegFrameGrabber frameGrabber = null;
        try {
            frameGrabber = FFmpegFrameGrabber.createDefault("d:/111.mp4");
            frameGrabber.start();
            long frameTime = frameGrabber.getLengthInTime() / 1000000;
            int frameLength = frameGrabber.getLengthInFrames();
            List<Integer> list = random(frameTime, frameLength);
            for (int i = 0; i < frameLength; i++) {
                Frame frame = frameGrabber.grabImage();
                if (list.contains(i)) {
                    Java2DFrameConverter converter = new Java2DFrameConverter();
                    BufferedImage image = converter.getBufferedImage(frame);
                    FileOutputStream outFile = null;
                    try {
                        outFile = new FileOutputStream(
                                "d:/111/" + UUID.randomUUID().toString().replaceAll("-", "") + ".png");
                        ImageIO.write(image, "png", outFile);
                    } catch (IOException e) {
                    } finally {
                        try {
                            if (outFile != null) {
                                outFile.close();
                            }
                        } catch (IOException e) {
                        }
                    }
                }
            }
            System.out.println(String.format("视频总时长=%ss,总帧数=%s,抽取帧数=%s", frameTime, frameLength, list.size()));
        } catch (org.bytedeco.javacv.FrameGrabber.Exception e) {
        } finally {
            if (frameGrabber != null) {
                try {
                    frameGrabber.stop();
                } catch (org.bytedeco.javacv.FrameGrabber.Exception e) {
                }
            }
        }
    }
 
    private List<Integer> random(long frameTime, int frameLength) {
        long count = 200;
        if (frameTime <= 100) {
            count = 10;
        } else if (frameTime <= 1800) {
            count = frameTime / 10;
        }
        List<Integer> list = new ArrayList<Integer>();
 
        if (frameLength < count) {
            for (int i = 0; i < frameLength; i++) {
                list.add(i);
            }
            return list;
        }
 
        long range = (frameLength - 5) / count;
        for (long i = range + 5; i < frameLength; i = i + range) {
            int rand = (int) ((i - range) + Math.random() * range);
            list.add(rand);
        }
        return list;
    }
 
}

相关文章

  • java-FFmpeg1.4.4读取视频随机截图

  • Guava | IO

    一、Java IO 基于流的读取方式:只能顺序读取,不能随机读取

  • 视频截图

    1.iOS9.0以前的截图 1.1框架 1.1步骤 1.2使用 2.iOS9.0以后的截图 2.1框架 2.2步骤...

  • 视频截图

    简介 视频截图,一般都是后台服务器给我提供的,有时候也需要我们自己去实现。要进行视频截图,首先要导入AVFound...

  • 非阻塞IO初探

    RandomAccessFile 随机读取文件内容 构造方法 RandomAccessiFile raf=new ...

  • Java读取文件方法汇总

    这篇文章主要为大家详细介绍了Java读取文件方法,按字节读取文件内容、按字符读取文件内容、随机读取文件内容等,具有...

  • Java读取文件方法汇总

    这篇文章主要为大家详细介绍了Java读取文件方法,按字节读取文件内容、按字符读取文件内容、随机读取文件内容等,具有...

  • jmeter随机读取CSV文件数据

    我们常用配置元件“CSV 数据文件设置”来读取CSV文件数据,读取结果往往是按顺序来读取的。如果需要随机来读取数据...

  • Unity视频读取

    视频单个读取StreamingAssets文件夹中的视频 视频多个按顺序读取StreamingAssets文件夹

  • CV - hw1

    视频回放:不断读取摄像头视频并回放 2.键盘读取:按空格键开始录视频,再按空格键录视频停止 鼠标读取:按鼠标左键,...

网友评论

      本文标题:java-FFmpeg1.4.4读取视频随机截图

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