java获取视频第一帧_java opencv获取视频第一帧-程序员宅基地

技术标签: java  

java获取视频第一帧

利用FFmpegFrameGrabber处理视频流直接上代码支持window和unix系统

pom文件引入

		<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>

示例代码

package com.util;

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

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;


/**
 * @author : 
 * @version 1.0
 * @description 获取视频第一帧视频
 **/
public class VideoUtil {
    

    /**
     * 获取指定视频的帧并保存为图片至指定目录
     * @param videofile  源视频文件路径
     * @param framefile  截取帧的图片存放路径
     * @throws Exception
     */
    public static void fetchFrame(String videofile, String framefile)
            throws Exception {
    
        File targetFile = new File(framefile);
        FFmpegFrameGrabber ff = new FFmpegFrameGrabber(videofile);
        ff.start();
        int lenght = ff.getLengthInFrames();
        int i = 0;
        Frame f = null;
        while (i < lenght) {
    
            // 过滤前5帧,避免出现全黑的图片,依自己情况而定
            f = ff.grabFrame();
            if ((i > 5) && (f.image != null)) {
    
                break;
            }
            i++;
        }
        int owidth = f.imageWidth;
        int oheight = f.imageHeight;
        // 对截取的帧进行等比例缩放
        int width = 800;
        int height = (int) (((double) width / owidth) * oheight);
        Java2DFrameConverter converter =new Java2DFrameConverter();
        BufferedImage fecthedImage =converter.getBufferedImage(f);
        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
        bi.getGraphics().drawImage(fecthedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH),
                0, 0, null);
        ImageIO.write(bi, "jpg", targetFile);
        ff.flush();
        ff.stop();

    }

    public static void main(String[] args) {
    
        try {
    
            VideoUtil.fetchFrame("C:\\Users\\MyPC\\Desktop\\sql\\test\\1.mp4", "C:\\Users\\MyPC\\Desktop\\sql\\test\\6.jpg");
        } catch (Exception e) {
    
            e.printStackTrace();
        }
    }
}

/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44663816/article/details/120322515

智能推荐

Linux C 异常处理:非局部goto jmp_buf/setjmp()/longjmp()_linux jmp_buf-程序员宅基地

文章浏览阅读992次。一、代码 #include jmp_buf、setjmp()、longjmp()#include #include //#include //jmp_buf、setjmp()、longjmp()//jmp_buf j;void raise_exception(void){ printf("before longjmp()_linux jmp_buf

HTML5/jQuery动画应用 3D视觉效果_jquery 多图3d展示效果-程序员宅基地

文章浏览阅读909次。登录 | 注册收藏成功确定收藏失败,请重新收藏确定*标题标题不能为空网址标签位置个人主页 - 我的知识同时保存至:选择知识图谱 选择知识图谱新建?_jquery 多图3d展示效果

 c++迭代器与  find() ,find_if()函数  _迭代去 find-程序员宅基地

文章浏览阅读820次。迭代器与 find() ,find_if()函数class CPenson { //定义一个类 public: CPenson(void) { } ~CPenson(void) { } bool CPenson::operator==(const CPenson &r) //用于find { return(age = r.age); }public: int age; //年龄};typedef struct finder_t { /..._迭代去 find

神通数据库连接问题_神通服务器-程序员宅基地

文章浏览阅读1.2w次,点赞6次,收藏11次。神通数据库:若新建了数据库,需要在dos界面下运行命令services.msc;手动启动新的数据库服务器。若新建的数据库连接设置 ,新建数据库连接时设定用户名密码有如下规则:用户名 sysdba密码szoscar55_神通服务器

分库分表之sharding-jdbc_分库分表shardingjdbc-程序员宅基地

文章浏览阅读1k次。分库分表之sharding-jdbc背景:随着mysql越来越成熟以及去IOE的大势下,mysql被互联网公司运用的炉火纯青的同时,也被带进金融行业。但金融行业有其特殊属性,对数据的要求非常高,而相对轻巧mysql数据库往往需要辅助工具来解决某些严苛的使用场景。而因为mysql的轻巧等因素,导致其单机比较容易出现性能瓶颈,而成熟的oralce单机性能强悍。但是对比成熟且昂贵的oracle来说,开源免费的特性配合成熟的生态使得越来越被企业选用,但相应的运维能力要求也水涨船高。以金融业的某银行为例,_分库分表shardingjdbc

Composer使用_composer package search-程序员宅基地

文章浏览阅读262次。原文:http://www.cnblogs.com/52fhy/p/5246013.html#3876041是什么如果你知道yum、apt-get、npm、bower等命令中的一种或者多种,那么,你也能很快知道composer是什么了。没错,它就是PHP里快速安装类库的。平时,我们安装一个PHP类库,需要搜索-&gt;下载;使用composer,我们只要知道包名,直接composer insatl..._composer package search

随便推点

__attribute__ 总结___attribute__((warn_unused_result))-程序员宅基地

文章浏览阅读407次。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attribute是GNU C特色之一,在iOS用的比较广泛.系统中有许多地方使用到. attribute可以设置函数属性(Function Attribute )、变量属性(Variable Attrib___attribute__((warn_unused_result))

python的plotnine_python数据可视化系列---plotnine(1)-程序员宅基地

文章浏览阅读463次。最近在学习python数据可视化,因为之前有R语言的ggplot2基础,并且一直受益于其语法的简单,但做出来的图十分漂亮的优点。因此,自然搜到了plotnine包。该包非常新,从其官网的版权申明年份也可看出---2019。plotnie与R语言的ggplot2都是基于Wilkinson在《Grammar of Graphics》一书中所提出的图形语法的具体实现。概括来讲,这套图形语法把绘图过程分为..._python中plotnine

Windows程序设计 编写一个简单的弹窗exe_windows实现循环弹窗-程序员宅基地

文章浏览阅读3.3k次。代码:#include <windows.h>int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){MessageBox (NULL, TEXT ("哇塞,第一个用C写的Win32 APP!"), TEXT ("尝试"), MB_YESNO|MB_DEFBUTTON2 | MB_ICONQUESTION)_windows实现循环弹窗

解决“VMware Station无法检测此光盘映像中的操作系统。您需要指定要安装的操作系统。”_无法检测此光盘映像中的操作系统您需要指定安装操作系-程序员宅基地

文章浏览阅读6.3w次,点赞7次,收藏25次。 ISO文件是我从官网下载的,资源本身肯定是没有问题的。 我的解决办法是,选择稍后安装操作系统。在自定义硬件里,选择使用ISO映像文件。 然后配置好后打开虚拟机即可。..._无法检测此光盘映像中的操作系统您需要指定安装操作系

如何快速上手Jenkinsfile编写?再快一点?-程序员宅基地

文章浏览阅读1.7k次。您好,本章主要我们主要学习流水线Jenkinsfile的开发工具。主要包含以下内容:1.片段生成器2.声明式语法生成器3.全局变量参考4. 常用的流水线方法适合人群:所有对Dev..._jenkinsfile编写方法

FFMPEG 使用显卡加速转码_javacv ffmpeg显卡加速-程序员宅基地

文章浏览阅读1w次,点赞11次,收藏56次。FFMPEG 使用显卡加速转码前言视频转码时如果遇见视频比较大、时长很长的时候,转码压制需要等待很久且及占用cpu,所以就在想有没有什么办法可以加速转码进度呢 ,故本篇文章记录FFMPEG如何调用显卡对转换编码格式或者压制进行加速。软硬编解码的区分:软编码:使用CPU进行编码硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等软硬编解码的区别: 软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点。_javacv ffmpeg显卡加速

推荐文章

热门文章

相关标签