利用FFmpegFrameGrabber截取视频中的某一帧图片压缩并旋转
依赖引入
<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截取视频中的某一帧图片压缩并旋转相关推荐
- Matlab 如何截取视频中的每一帧图像
实在感谢这位朋友brothers,我找了好几个小时啊~~ %这段代码可以选择一个或多个视频,根据视频名称和帧的序号对图片命名.设定的只能选择avi格式,至于其它格式的视频你可以改改代码的第一句试试%看 ...
- python OpenCV 按时间间隔截取视频中任意片段帧
通过视频制作相应的数据集,截取视频中的任意片段帧. 使用python截取视频中的任意片段帧,直接上代码: import cv2 import os# 定义视频文件路径和保存图像文件路径 video_p ...
- python 替换array中的值_利用Python提取视频中的字幕(文字识别)
我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...
- 利用python提取视频中的字幕
利用python提取视频中的字幕 `` 一.导包 import base64 import os import cv2 import requests import aip from aip impo ...
- access数据放到list中_利用Python提取视频中的字幕(文字识别)
我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...
- java利用正则截取字符串中的数字
java利用正则截取字符串中的数字 String str = "xxx第47297章33";String regex = "\\d*";Pattern p = ...
- java 中利用subString 截取字符串中第三个/后面的内容,并将/用代替
原文地址为: java 中利用subString 截取字符串中第三个"/"后面的内容,并将/用>代替 private String extractString(String ...
- 如何截取视频中的一部分制作成GIF动态图
如何截取视频中的一部分制作成GIF动态图?关于截取视频于转换视频格式这方面,可能还有很多朋友不能有效解决问题,当然,这和我们的操作能力关系不大,更重要的是需要一款简单实用的视频转换器,网上关于怎样把视 ...
- python如何截取视频中的某一段
使用python截取视频中的某一段,直接上代码: def cut_video(video_path, save_path):"""截取某一段视频""& ...
- 如何截取视频中的一部分,制作成GIF动态图
怎么把视频做成gif 截取视频中的一部分内容,制作成GIF动态图?是先用播放器进行截取,还是说先转换视频格式,然后用相应的GIF编辑器呢.网上关于怎样把视频截取转化成gif动态图片的方法有很多,林林总 ...
最新文章
- canvas上的像素操作(图像复制,细调)
- 农大计算机学院姜新华,计算机学院红帽学院揭牌仪式
- 你以为的并不是你所以为的,《传说之下》Undertale打破游戏的墙
- C#中对虚拟属性和抽象属性的重写,重写label实例
- 前端开发必须要了解的CSS原理
- 深度解读服务治理 ServiceMesh、xDS
- Data Structure Problem
- PAT乙级 1003. 我要通过!
- 关于asp.net利用mono部署到Linux上的一些说明
- 论文阅读课11-TEMPROB:Improving Temporal Relation Extraction with a Globally Acquired Statistical Resource
- Linux shell脚本的字符串截取
- mysql 高性能架构_高性能MySQL之架构与历史(1)
- 商业智能BI和报表的区别?
- ASP.NET对HTML元素进行权限控制(二)
- 沸点网络电视 v3.2 官方版
- python爬虫 笔趣阁
- 哥德巴赫猜想 php,C++_c++验证哥德巴赫猜想,哥德巴赫猜想是世界近代三大 - phpStudy...
- 没有安装sql数据库如何用vs打开mdf数据库文件
- ORACLE ORDER BY用法总结
- Vue3使用Swiper