引入依赖

org.bytedeco

javacv

1.5.3

org.bytedeco

javacv-platform

1.5.3

代码实现

package com.java.mmzsblog;

import org.bytedeco.javacv.FFmpegFrameGrabber;

import org.bytedeco.javacv.Frame;

import org.bytedeco.javacv.Java2DFrameConverter;

import org.bytedeco.javacv.OpenCVFrameConverter;

import org.bytedeco.opencv.global.opencv_core;

import org.bytedeco.opencv.opencv_core.IplImage;

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

/**

* @author :created by mmzsblog.cn

* @description: javaCV开发详解之2:截取推流服务器视频的某帧或本地视频的某帧

* @date :created at 2020/07/07 10:57

*/

public class VideoTool {

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

// randomGrabberFFmpegImage("http://192.168.0.11/image/00/05/test.mp4", "D:\\test", "test2");

// randomGrabberFFmpegImage("D:\\1.mp4", "D:\\test", "test");

randomGrabberFFmpegImage("rtmp://192.168.0.11:1935/live/123456", "D:\\test", "test");

//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();

//获取旋转角度信息(90度)

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

//帧

Frame f;

//i可以控制获取第几帧

int i = 0;

while (i < 100) {

//一帧一帧去抓取视频图片,ff.grabImage();每次抓取下一帧

f = ff.grabImage();

IplImage src = null;

//旋转图像并输出第 i 帧(i是4的倍数)

if (i % 4 == 0) {

//手机录的视频有旋转角度,需要旋转处理

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

}

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();

}

}

}

标题:JavaCV开发详解之2:截取推流服务器视频的某帧或本地视频的某帧

作者:mmzsblog

地址:https://www.mmzsblog.cn/articles/2020/09/07/1599489221392.html

-----------------------------

如未加特殊说明,此网站文章均为原创。

网站转载须在文章起始位置标注作者及原文连接,否则保留追究法律责任的权利。

公众号转载请联系网站首页的微信号申请白名单!

个人微信公众号 ↓↓↓

java 推流_JavaCV开发详解之2:截取推流服务器视频的某帧或本地视频的某帧相关推荐

  1. 基于Java的音频转发服务器_javaCV开发详解之5:录制音频(录制麦克风)到本地文件/流媒体服务器(基于javax.sound、javaCV-FFMPEG)...

    javaCV系列文章: 补充篇: 前言:本篇文章基于javaCV-FFMPEG,关于javaCV官方是没有文档或者api文档可以参考的,所以还有很多地方需要研究: 本章对于ffmpeg的需要有一定了解 ...

  2. java录制视频_javacv开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)...

    javaCV系列文章: ' i# f% S' a# J9 X! w- g) wjavacv开发详解之1:调用本机摄像头视频 4 r' C, [4 ?' M7 Y; }javaCV开发详解之2:推流器实 ...

  3. JAVA使用摄像头录制_JavaCV开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)...

    引入依赖 org.bytedeco javacv 1.5.3 org.bytedeco javacv-platform 1.5.3 代码实现 package com.java.mmzsblog; im ...

  4. java 音频转码_javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)...

    javaCV系列文章: 补充篇: 前言: 之前几章把javaCV-FFmpeg中的能够实现的基本功能大致梳理了一遍,本章在之前几章基础上实现一个通用的音频编码和参数转换器 实现功能: ①音频编码转换② ...

  5. java和php混合_PHP和Java强强联合 集成开发详解

    首先,你必须要知道PHP/Java桥为在PHP脚本中集成Java类创建了哪些特殊的函数(PHP类),这些函数包括: ◆java:它允许你访问给定名称的Java类型,如: ◆java("jav ...

  6. 孙鑫 java web_javaweb(code) 孙鑫老师的java web 开发详解的源代码 - 下载 - 搜珍网

    javaweb开发详解(code)/AppendixA/FirstPage.html javaweb开发详解(code)/AppendixA/form.html javaweb开发详解(code)/A ...

  7. JavaCV开发详解专栏文章目录(JavaCV速查手册)

    本章作为**JavaCV开发详解**专栏的目录. 为了方便大家分类查找,我们把分为两个目录: 第一个分类目录,根据文章技术类型进行分类. 第二个目录,按照博主更新顺序排列. 有些文章既是设备采集又实现 ...

  8. JavaCV开发详解之3:通用拉流器实现,从流媒体服务器拉流rtsp/rtmp录制成视频文件

    JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...

  9. Apache Thrift - java开发详解

    2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...

最新文章

  1. 统计简单学_常用统计量
  2. 计算机基础资料管理办法,计算机基础知识试题(答案_)资料.doc
  3. ai人工智能服务器操作系统,全球首款100%纯国产的AI操作系统来了,但说媲美Windows有意义吗...
  4. bestcoder Delete
  5. Flex 学习随笔 ---- 玩 Chart
  6. 约瑟夫环 java_约瑟夫环Java实现
  7. 人脸识别dlib库 记录
  8. [Maven] Project build error: 'packaging' with value 'jar' is invalid. Aggregator projects require
  9. 关于CodeSmith生成CSLA代码的联想
  10. OPNET网络仿真分析-1.6、OPNET软件使用
  11. android 瀑布流StaggeredGridLayoutManager重新排序后,顶部留白处理
  12. MATLAB数学建模方法与实践(第3版)——读书笔记
  13. unity天空盒渐变_在Unity3D中使用天空盒
  14. 飞行管理计算机组成,飞行模拟中飞行管理计算机系统CDU组件设计与仿真
  15. 360抢票王验证码自动识别真的那么牛吗?
  16. VIS2020 长论文摘要机翻
  17. 【EasyExcel】 模板填充批量导出,多文件以zip压缩包格式导出
  18. 金融信贷存量客户运营管理
  19. 《多媒体在初中数学中的运用研究》课题研究活动记录
  20. Socket英文解释

热门文章

  1. 水墨画地图(100种制图法3)
  2. fastapi python 并发_如何评价最近爆红的FastAPI?
  3. WDF模型驱动-初稿
  4. srs webrtc服务p2p案例信令分析
  5. vyos配置dhcp
  6. 从高德地图大批量扒取数据,并写入excel
  7. delphi7 手动安装 indy10.2.3
  8. K8s 从懵圈到熟练 – 集群网络详解
  9. qt运行时插件目录设置
  10. stm32f4 USB BULK 全速配置