技术标签: java
利用FFmpegFrameGrabber处理视频流直接上代码支持window和unix系统
<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();
}
}
}
/
文章浏览阅读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
文章浏览阅读909次。登录 | 注册收藏成功确定收藏失败,请重新收藏确定*标题标题不能为空网址标签位置个人主页 - 我的知识同时保存至:选择知识图谱 选择知识图谱新建?_jquery 多图3d展示效果
文章浏览阅读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_神通服务器
文章浏览阅读1k次。分库分表之sharding-jdbc背景:随着mysql越来越成熟以及去IOE的大势下,mysql被互联网公司运用的炉火纯青的同时,也被带进金融行业。但金融行业有其特殊属性,对数据的要求非常高,而相对轻巧mysql数据库往往需要辅助工具来解决某些严苛的使用场景。而因为mysql的轻巧等因素,导致其单机比较容易出现性能瓶颈,而成熟的oralce单机性能强悍。但是对比成熟且昂贵的oracle来说,开源免费的特性配合成熟的生态使得越来越被企业选用,但相应的运维能力要求也水涨船高。以金融业的某银行为例,_分库分表shardingjdbc
文章浏览阅读262次。原文:http://www.cnblogs.com/52fhy/p/5246013.html#3876041是什么如果你知道yum、apt-get、npm、bower等命令中的一种或者多种,那么,你也能很快知道composer是什么了。没错,它就是PHP里快速安装类库的。平时,我们安装一个PHP类库,需要搜索->下载;使用composer,我们只要知道包名,直接composer insatl..._composer package search
文章浏览阅读407次。 attribute是GNU C特色之一,在iOS用的比较广泛.系统中有许多地方使用到. attribute可以设置函数属性(Function Attribute )、变量属性(Variable Attrib___attribute__((warn_unused_result))
文章浏览阅读463次。最近在学习python数据可视化,因为之前有R语言的ggplot2基础,并且一直受益于其语法的简单,但做出来的图十分漂亮的优点。因此,自然搜到了plotnine包。该包非常新,从其官网的版权申明年份也可看出---2019。plotnie与R语言的ggplot2都是基于Wilkinson在《Grammar of Graphics》一书中所提出的图形语法的具体实现。概括来讲,这套图形语法把绘图过程分为..._python中plotnine
文章浏览阅读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实现循环弹窗
文章浏览阅读6.3w次,点赞7次,收藏25次。 ISO文件是我从官网下载的,资源本身肯定是没有问题的。 我的解决办法是,选择稍后安装操作系统。在自定义硬件里,选择使用ISO映像文件。 然后配置好后打开虚拟机即可。..._无法检测此光盘映像中的操作系统您需要指定安装操作系
文章浏览阅读1.7k次。您好,本章主要我们主要学习流水线Jenkinsfile的开发工具。主要包含以下内容:1.片段生成器2.声明式语法生成器3.全局变量参考4. 常用的流水线方法适合人群:所有对Dev..._jenkinsfile编写方法
文章浏览阅读1w次,点赞11次,收藏56次。FFMPEG 使用显卡加速转码前言视频转码时如果遇见视频比较大、时长很长的时候,转码压制需要等待很久且及占用cpu,所以就在想有没有什么办法可以加速转码进度呢 ,故本篇文章记录FFMPEG如何调用显卡对转换编码格式或者压制进行加速。软硬编解码的区分:软编码:使用CPU进行编码硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等软硬编解码的区别: 软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点。_javacv ffmpeg显卡加速