//------------maven配置文件---------------

org.bytedeco

javacv

0.8

/**

* 获取指定视频的帧并保存为图片至指定目录

* @param videofile 源视频文件路径

* @param framefile 截取帧的图片存放路径

* @throws Exception

*/

public static void fetchFrame(String videofile, String framefile)

throws Exception {

long start = System.currentTimeMillis();

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

}

IplImage img = f.image;

int owidth = img.width();

int oheight = img.height();

// 对截取的帧进行等比例缩放

int width = 800;

int height = (int) (((double) width / owidth) * oheight);

BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);

bi.getGraphics().drawImage(f.image.getBufferedImage().getScaledInstance(width, height, Image.SCALE_SMOOTH),

0, 0, null);

ImageIO.write(bi, "jpg", targetFile);

// ff.flush();

ff.stop();

System.out.println(System.currentTimeMillis() - start);

}

public static void main(String[] args) {

try {

ImageUtil.fetchFrame("https://jsjoke.net/upload-1529285839603-touristappid.o6zAJswEDExvrLeuQTdnRSIz87Vo.f0fd65c07d78b8fc831c97888e4d7a55.mp4", "D:/test4.jpg");

} catch (Exception e) {

e.printStackTrace();

}

}

--------------------------------------- 解决图片旋转问题---------------------------------------

通过一段时间的搜索了解到,如果拍摄的视频中带有旋转(rotate)信息,那么截取出来的图片就会被旋转。通过查询API发现FFmpegFrameGrabber的getVideoMetadata("rotate")方法可以获取到视频的旋转信息。根据获取到的rotate信息对ff.grabImage()得到的Frame进行旋转,但是Frame并没有提供旋转接口。但有一个IpImage对象提供了旋转方法

public static void main(String[] args) {

try {

ImageUtil.fetchFrame("https://jsjoke.net/upload-1529285839603-touristappid.o6zAJswEDExvrLeuQTdnRSIz87Vo.f0fd65c07d78b8fc831c97888e4d7a55.mp4", "D:/test4.jpg");

} catch (Exception e) {

e.printStackTrace();

}

}

public static IplImage rotate(IplImage src, int rotate) {

IplImage img = IplImage.create(src.height(), src.width(), src.depth(), src.nChannels());

opencv_core.cvTranspose(src, img);

opencv_core.cvFlip(img, img, angle);

return img;

}

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import org.bytedeco.javacpp.opencv_core;

import org.bytedeco.javacpp.opencv_core.IplImage;

import org.bytedeco.javacv.FFmpegFrameGrabber;

import org.bytedeco.javacv.Frame;

import org.bytedeco.javacv.FrameGrabber.Exception;

import org.bytedeco.javacv.Java2DFrameConverter;

import org.bytedeco.javacv.OpenCVFrameConverter;

public abstract class FrameGrabberKit {

public static void main(String[] args) throws Exception {

randomGrabberFFmpegImage("C:/Users\\Administrator\\Desktop\\VID_20171229_162251.mp4", "G:\\test", "111");

}

public static void randomGrabberFFmpegImage(String filePath, String targerFilePath, String targetFileName)

throws Exception {

FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);

ff.start();

String rotate =ff.getVideoMetadata("rotate");

Frame f;

int i = 0;

while (i <1) {

f =ff.grabImage();

IplImage src = null;

if(null !=rotate &&rotate.length() > 1) {

OpenCVFrameConverter.ToIplImage converter =new OpenCVFrameConverter.ToIplImage();

src =converter.convert(f);

f =converter.convert(rotate(src, Integer.valueOf(rotate)));

}

doExecuteFrame(f,targerFilePath,targetFileName);

i++;

}

ff.stop();

}

/*

* 旋转角度的

*/

public static IplImage rotate(IplImage src, int angle) {

IplImage img = IplImage.create(src.height(), src.width(), src.depth(), src.nChannels());

opencv_core.cvTranspose(src, img);

opencv_core.cvFlip(img, img, angle);

return img;

}

public static void doExecuteFrame(Frame f, String targerFilePath, String targetFileName) {

if (null ==f ||null ==f.image) {

return;

}

Java2DFrameConverter converter =new Java2DFrameConverter();

String imageMat ="jpg";

String FileName =targerFilePath + File.separator +targetFileName +"." +imageMat;

BufferedImage bi =converter.getBufferedImage(f);

System.out.println("width:" + bi.getWidth());

System.out.println("height:" + bi.getHeight());

File output =new File(FileName);

try {

ImageIO.write(bi,imageMat,output);

}catch (IOException e) {

e.printStackTrace();

}

}

}

org.bytedeco

javacv-platform

1.3.1

来源:

java获取视频播第一帧

FFMPEG 功能很强大,做视频必备的软件.大家可通过 http://ffmpeg.org/ 了解.Windows版本的软件,可通过 http://ffmpeg.zeranoe.com/builds/ ...

第五十二篇、 OC获取视频的第一帧图片thumbnailImage

获取视频的第一帧图片 有时候我们拍摄完视频后,希望获取一张图片当作这个视频的介绍,这个图片thumbnailImage可以从视频的第一帧获取到. 我们的思路是先获取视频的URL,然后初始化一个MPMo ...

PHP获取视频的第一帧与时长

//获得视频文件的缩略图 function getVideoCover($file,$time,$name) { if(empty($time))$time = '1';//默认截取第一秒第一帧 $s ...

在Android中如何获取视频的第一帧图片并显示在一个ImageView中

String path  = Environment.getExternalStorageDirectory().getPath(); MediaMetadataRetriever media = n ...

C&num;&colon;获取视频某一帧的缩略图

读取方式:使用ffmpeg读取,所以需要先下载ffmpeg.网上资源有很多. 原理是通过ffmpeg执行一条命令获取视频某一帧的缩略图. 首先,需要获取视频的帧高度和帧宽度,这样获取的缩略图才不会变形 ...

java获取当月的第一天和最后一天&comma;获取本周的第一天和最后一天

/** * 获取指定日期所在周的第一天和最后一天,用下划线连接 * @param dataStr * @return * @throws ParseException */ public static ...

关于ffmpeg &sol;iis 8&period;5 服务器下,视频截取第一帧参数配置

ffmpeg 视频截取第一帧参数配置: 网站找了很多资料,但是都不能满足要求,然后自己写下解决过程. 首先看自己PHP 版本,安全选项里面 php5.4  跟php5.6 是不一样的.去除里面的sys ...

java获取当前月第一天和最后一天,上个月第一天和最后一天

package com.test.packager; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...

java获取视频缩略图

近期由于在做一个关于视频播放的项目,需要使用程序自动获取视频文件的缩略图,特写此文供其他人参考,有不清楚之楚可以给我留言. 1.使用工具:ffmpeg, 官网下载地址:http://ffmpeg.or ...

随机推荐

C&num;命名规则和编码规范

用Pascal规则来命名属性.方法.事件和类名. public class HelloWorld { public void SayHello(string name) { } } Pascal规则是 ...

CodeIgniter 下引入ORM Doctrine

做了两年的CI开发,一直使用activeRecord来操作数据库.简单,轻巧加方便.最近一个项目交给手下去做,也是采用从数据库设计入手的开发流程,现在已经上线运行.经历了理清需求,设计数据库,在CI中 ...

Qt中sleep&lpar;&rpar;的实现(耳目一新的两种方法)

在Qt中并没有Sleep函数可以调用,在程序编写时往往需要休眠几秒,这里举出两个方法,不知道是否啥不良隐患没~~ 方法一: class SleeperThread : public QThread{p ...

Oracle表连接总结

1 简述 1) 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的.用来连接两张表的表达式组成了连接条件.当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合结 ...

tsst

import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Sc ...

SQL表连接查询&lpar;inner join&lpar;join&rpar;、full join、left join、right join、cross join&rpar;

下面列出了您可以使用的 JOIN 类型,以及它们之间的差异. JOIN: 如果表中有至少一个匹配,则返回行(join=inner join) LEFT JOIN: 即使右表中没有匹配,也从左表返回所有 ...

TurnipBit—MicroPython开发板:妥妥拽拽零基础也能玩编程

可视化编程网站入口:www.turnipbit.com 说到编程.谈到硬件,你也许会想到屌丝逆袭女神的"传奇"故事,也许会浮现出带着眼镜.头发稀少.无精打采的程序猿形象.&quot ...

Redis服务信息

想要获得下面的redis服务器信息,只需要在命令行中输入:info server 部分记录了 Redis 服务器的信息,它包含以下域: redis_version : Redis 服务器版本 redi ...

MVC 视图助手书写规范及注意点

@Html.TextBoxFor() 讲解(其他类似的 @Html.LabelFor 等)同理 @Html.TextBoxFor(model => model.SearchParams.Name ...

&lbrack;Vuex&rsqb; Create a Vuex Store using TypeScript

A Vuex store centralizes the state of your app, making it easy to reason about your state flow. In t ...

java 取视频第一帧,java获取视频的第一帧相关推荐

  1. java 获取第一帧_java获取视频的第一帧

    //------------maven配置文件--------------- org.bytedeco javacv 0.8 /** * 获取指定视频的帧并保存为图片至指定目录 * @param vi ...

  2. php 获取视频首帧,PHP获取视频的第一帧与时长

    //获得视频文件的缩略图 function getVideoCover($file,$time,$name) { if(empty($time))$time = '1';//默认截取第一秒第一帧 $s ...

  3. java获取视频时长_Java获取视频的大小、时长

    前端上传视频之后,根据上传的视频文件获取视频的大小和时长 1.获取视频时长 private String ReadVideoTime(File source) { Encoder encoder = ...

  4. java取网页源码_Java获取任意http网页源代码的方法

    本文实例讲述了JAVA获取任意http网页源代码.分享给大家供大家参考,具体如下: JAVA获取任意http网页源代码可实现如下功能: 1. 获取任意http网页的代码 2. 获取任意http网页去掉 ...

  5. java 获取本年第一天_java获取年份的第一天和最后一天

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. package com.dada.test; import java.text.Simpl ...

  6. java取上一个月_Java获取指定日期前一月(年)或后一月(年)

    /** * 获取指定月的前一月(年)或后一月(年) * @param dateStr * @param addYear * @param addMonth * @param addDate * @re ...

  7. java 月第一天_java获取当前月第一天和最后一天

    获取当前月第一天: /** * 获取当前月第一天 * @param month * @return */ public static String getFirstDayOfMonth(int mon ...

  8. php获得视频分辨率,php+ffmpeg 获取视频相关信息(缩略图、视频分辨率)

    ffmpeg是一款开源.跨平台的视频处理程序,可用在Windows.mac.linux等平台,可以方便的运用多种语言脚本来调用其执行视频的操作. 下面介绍使用ffmpeg获取视频首帧的方法. & ...

  9. php 判断视频时长,php 获取视频时长

    利用ffmpeg只能获取到本地视频的信息. function video_time($file) { ob_start(); passthru(sprintf(FFMPEG_PATH, $file)) ...

  10. mysql季度第一天_mysql 获取季度的第一天 本月的第一天,本周的第一天sql语句(转)...

    感谢:http://www.111cn.net/database/110/d45124323da8d2d87b80f78319987eda.htm 查看同主题的另一篇博客:http://blog.cs ...

最新文章

  1. 最新清华大学arXiv上传的深度学习摄像头运动估计论文
  2. 青龙羊毛——利分闪电(搬运)
  3. 读《构建之法》第11,12章有感
  4. Java生鲜电商平台-用户管理的架构与实战
  5. 从JDBC ResultSet创建对象流
  6. C++基类指针指向派生类(指针)
  7. 把表单转成json,并且name为key,value为值
  8. [2019杭电多校第四场][hdu6623]Minimal Power of Prime
  9. Redis学习与实战之列表
  10. 关于视觉SLAM中特征点法,光流法和直接法的区别和理解
  11. c语言 十进制转换成二进制 递归实现
  12. 系统架构设计方法论——TOGAF
  13. 四分位数和百分位数_20种四分位数
  14. 用程序 揭秘 用手机号尾号暴露你年龄的 骗局
  15. 世界上最具价值的10家公司!
  16. 对数数学知识回忆(log)
  17. 我们不再需要3Q大战
  18. Hutool Java常用工具类汇总
  19. 牧场物语gb模拟器JAVA_3DS GBC模拟器+GB/GBC游戏合集下载
  20. python3中生成图片验证码和短信验证码的程序

热门文章

  1. FlashPlayer安全限定读书手札
  2. 谷歌中国开发者网站地址
  3. python 股票市场分析实战
  4. 面向对象(四)多态以及多态性,
  5. 小学计算机ps课题计划,小学生学习习惯养成课题总结
  6. 阿里云和腾讯云免费SSL证书 专题
  7. 基于多机CUP分布式训练
  8. GMS-VBA工程不可查看-破解方法
  9. java ip加入黑名单_关于黑名单IP的设置
  10. Low Latency HLS的实现优化