依赖引入

<dependency><groupId>org.bytedeco.javacpp-presets</groupId><artifactId>ffmpeg-platform</artifactId><version>3.2.1-1.3</version>
</dependency><dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.4.1</version>
</dependency>

测试代码

package top.fqq.demo;import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.util.UUID;/*** @author: fitch* @description: 描述* @data: 2020/10/21 10:01**/
public class VideoProcessing {// 存放截取视频某一帧的图片public static String videoFramesPath = "D:/test";/*** 将视频文件帧处理并以“jpg”格式进行存储。 依赖FrameToBufferedImage方法:将frame转换为bufferedImage对象** @param path*/public static byte[] grabberVideoFramer(String path) {// Frame对象Frame frame = null;// 标识int flag = 0;try {/*获取视频文件*/URL url =new URL(path);//利用HttpURLConnection对象,我们可以从网络中获取网页数据.HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setDoInput(true);conn.connect();InputStream inputStream= conn.getInputStream();FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber(inputStream);fFmpegFrameGrabber.start();//视频旋转角度,可能是nullString rotate_old=fFmpegFrameGrabber.getVideoMetadata("rotate");// 获取视频总帧数int ftp = fFmpegFrameGrabber.getLengthInFrames();System.out.println("时长 " + ftp / fFmpegFrameGrabber.getFrameRate() / 60);while (flag <= ftp) {frame = fFmpegFrameGrabber.grabImage();/*对视频的第五帧进行处理*/if (frame != null && flag == 1) {BufferedImage  bufferedImage= FrameToBufferedImage(frame);ByteArrayOutputStream out = new ByteArrayOutputStream();ImageIO.write(bufferedImage, "jpg", out);byte[] b = out.toByteArray();fFmpegFrameGrabber.stop();//有需要旋转if(rotate_old!=null && !rotate_old.isEmpty()){int rotate=Integer.parseInt(rotate_old);VideoProcessing.rotatePhonePhoto(bufferedImage,rotate);}fFmpegFrameGrabber.close();return b;}flag++;}} catch (Exception E) {E.printStackTrace();}return null;}public static BufferedImage FrameToBufferedImage(Frame frame) {// 创建BufferedImage对象Java2DFrameConverter converter = new Java2DFrameConverter();BufferedImage bufferedImage = converter.getBufferedImage(frame);return bufferedImage;}/*** 旋转照片** @return*/public static String rotatePhonePhoto(BufferedImage bufferedImage, int angel) {BufferedImage src;try {src = bufferedImage;int src_width = src.getWidth(null);int src_height = src.getHeight(null);int swidth = src_width;int sheight = src_height;if (angel == 90 || angel == 270) {swidth = src_height;sheight = src_width;}Rectangle rect_des = new Rectangle(new Dimension(swidth, sheight));BufferedImage res = new BufferedImage(rect_des.width, rect_des.height, BufferedImage.TYPE_INT_RGB);Graphics2D g2 = res.createGraphics();g2.translate((rect_des.width - src_width) / 2, (rect_des.height - src_height) / 2);g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);g2.drawImage(src, null, null);ImageIO.write(res,"jpg", new File("D:/test/90.jpg"));} catch (Exception e) {e.printStackTrace();}return null;}/*** 测试: 1、在D盘中新建一个test文件夹,test中再分成video和img,在video下存入一个视频,并命名为test D:/test/video D:/test/img* * @param args*/public static void main(String[] args) {byte[]  bytes= grabberVideoFramer("http://172.16.205.240:11935/group1/M00/00/07/rBEABV-PiJiEFeyOAAAAAAAAAAA149.mp4");System.out.println(bytes);}
}

利用FFmpegFrameGrabber截取视频中的某一帧图片压缩并旋转相关推荐

  1. Matlab 如何截取视频中的每一帧图像

    实在感谢这位朋友brothers,我找了好几个小时啊~~ %这段代码可以选择一个或多个视频,根据视频名称和帧的序号对图片命名.设定的只能选择avi格式,至于其它格式的视频你可以改改代码的第一句试试%看 ...

  2. python OpenCV 按时间间隔截取视频中任意片段帧

    通过视频制作相应的数据集,截取视频中的任意片段帧. 使用python截取视频中的任意片段帧,直接上代码: import cv2 import os# 定义视频文件路径和保存图像文件路径 video_p ...

  3. python 替换array中的值_利用Python提取视频中的字幕(文字识别)

    我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...

  4. 利用python提取视频中的字幕

    利用python提取视频中的字幕 `` 一.导包 import base64 import os import cv2 import requests import aip from aip impo ...

  5. access数据放到list中_利用Python提取视频中的字幕(文字识别)

    我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...

  6. java利用正则截取字符串中的数字

    java利用正则截取字符串中的数字 String str = "xxx第47297章33";String regex = "\\d*";Pattern p = ...

  7. java 中利用subString 截取字符串中第三个/后面的内容,并将/用代替

    原文地址为: java 中利用subString 截取字符串中第三个"/"后面的内容,并将/用>代替 private String extractString(String ...

  8. 如何截取视频中的一部分制作成GIF动态图

    如何截取视频中的一部分制作成GIF动态图?关于截取视频于转换视频格式这方面,可能还有很多朋友不能有效解决问题,当然,这和我们的操作能力关系不大,更重要的是需要一款简单实用的视频转换器,网上关于怎样把视 ...

  9. python如何截取视频中的某一段

    使用python截取视频中的某一段,直接上代码: def cut_video(video_path, save_path):"""截取某一段视频""& ...

  10. 如何截取视频中的一部分,制作成GIF动态图

    怎么把视频做成gif 截取视频中的一部分内容,制作成GIF动态图?是先用播放器进行截取,还是说先转换视频格式,然后用相应的GIF编辑器呢.网上关于怎样把视频截取转化成gif动态图片的方法有很多,林林总 ...

最新文章

  1. canvas上的像素操作(图像复制,细调)
  2. 农大计算机学院姜新华,计算机学院红帽学院揭牌仪式
  3. 你以为的并不是你所以为的,《传说之下》Undertale打破游戏的墙
  4. C#中对虚拟属性和抽象属性的重写,重写label实例
  5. 前端开发必须要了解的CSS原理
  6. 深度解读服务治理 ServiceMesh、xDS
  7. Data Structure Problem
  8. PAT乙级 1003. 我要通过!
  9. 关于asp.net利用mono部署到Linux上的一些说明
  10. 论文阅读课11-TEMPROB:Improving Temporal Relation Extraction with a Globally Acquired Statistical Resource
  11. Linux shell脚本的字符串截取
  12. mysql 高性能架构_高性能MySQL之架构与历史(1)
  13. 商业智能BI和报表的区别?
  14. ASP.NET对HTML元素进行权限控制(二)
  15. 沸点网络电视 v3.2 官方版
  16. python爬虫 笔趣阁
  17. 哥德巴赫猜想 php,C++_c++验证哥德巴赫猜想,哥德巴赫猜想是世界近代三大 - phpStudy...
  18. 没有安装sql数据库如何用vs打开mdf数据库文件
  19. ORACLE ORDER BY用法总结
  20. Vue3使用Swiper

热门文章

  1. oracle exadata维保,EXADATA数据一体机巡检说明
  2. TestStand系统框架简介
  3. 很好用的绘图软件cad,非常喜欢这个简易方法
  4. 企业进销存管理系统(一)
  5. 做PPT使用的矢量图标网站
  6. Power Platform 介绍
  7. 用java怎么做微信公众号,用Java搭建微信公众号(一)构建基础请求框架
  8. matlab 信号去直流,Speex中的近端信号去直流和预加重操作
  9. win10本机计算机策略,[本地策略组怎么打开]win10本地组策略打开方法
  10. 数电中一些常用的逻辑门符号