java 视频解析_ffmpeg解析视频的每一帧(java )
前置条件:下载opencv的jar包导入。ffmpeg
package test;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.videoio.VideoCapture;
import com.googlecode.javacv.cpp.opencv_highgui;
public class DecodeVideo {
public static void main(String[] args) {
System.loadLibrary("opencv_ffmpeg330_64");
// 加载本地的OpenCV库,这样就可以用它来调用Java API
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
run2();
}
public static void run2() {
// 读取视频文件
VideoCapture cap = new VideoCapture("F:/mysour/csdn/2.mp4");
System.out.println(cap.isOpened());
// 判断视频是否打开
if (cap.isOpened()) {
// 总帧数
double frameCount = cap.get(opencv_highgui.CV_CAP_PROP_FRAME_COUNT);
System.out.println("视频总帧数:" + frameCount);
// 帧率
double fps = cap.get(opencv_highgui.CV_CAP_PROP_FPS);
System.out.println("视频帧率" + fps);
// 时间长度
double len = frameCount / fps;
System.out.println("视频总时长:" + len);
Double d_s = new Double(len);
System.out.println(d_s.intValue());
Mat frame = new Mat();
for (int i = 0; i < d_s.intValue(); i++) {
// 设置视频的位置(单位:毫秒)
cap.set(opencv_highgui.CV_CAP_PROP_POS_MSEC, i * 1000);
// 读取下一帧画面
if (cap.read(frame)) {
System.out.println("正在保存");
// 保存画面到本地目录
Imgcodecs.imwrite("F:/mysour/video/output/" + i + ".jpg", frame);
}
}
// 关闭视频文件
cap.release();
}
}
}
ffmpeg默认可以加载avi格式的视频,
如果想要加载MP4格式的视频的话,需要在local.library.path路径下放置ffmpeg.dll文件。
本段java实现截取视频,每一秒截取一帧作为jpg图片保存在本地。
效果如下:
接下来,我在研究能不能把解析的图片再合成一个视频来播放。
如果有实现的大神请不吝赐教,小弟一定虚心学习。
网上找了资料,实现了图片转视频:
package test;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import org.jim2mov.core.DefaultMovieInfoProvider;
import org.jim2mov.core.ImageProvider;
import org.jim2mov.core.Jim2Mov;
import org.jim2mov.core.MovieInfoProvider;
import org.jim2mov.core.MovieSaveException;
import org.jim2mov.utils.MovieUtils;
/**
* 图片与视频转换工具类
*
* @author Administrator
*/
public class makeVideo {
/**
* 将图片转换成视频
* @param jpgDirPath jpg图片文件夹绝对路径
* @param aviFileName 生成的avi视频文件名
* @param fps 每秒帧数
* @param mWidth 视频的宽度
* @param mHeight 视频的高度
* @throws Exception
*/
public static void convertPicToAvi(String jpgDirPath, String aviFileName, int fps, int mWidth, int mHeight) {
// jpgs目录放置jpg图片,图片文件名为(1.jpg,2.jpg...)
final File[] jpgs = new File(jpgDirPath).listFiles();
if(jpgs==null || jpgs.length==0){
return;
}
// 对文件名进行排序(本示例假定文件名中的数字越小,生成视频的帧数越靠前)
Arrays.sort(jpgs, new Comparator() {
public int compare(File file1, File file2) {
String numberName1 = file1.getName().replace(".jpg", "");
String numberName2 = file2.getName().replace(".jpg", "");
return new Integer(numberName1) - new Integer(numberName2);
}
});
// 生成视频的名称
DefaultMovieInfoProvider dmip = new DefaultMovieInfoProvider(aviFileName);
// 设置每秒帧数
dmip.setFPS(fps>0?fps:3); // 如果未设置,默认为3
// 设置总帧数
dmip.setNumberOfFrames(jpgs.length);
// 设置视频宽和高(最好与图片宽高保持一直)
dmip.setMWidth(mWidth>0?mWidth:1440); // 如果未设置,默认为1440
dmip.setMHeight(mHeight>0?mHeight:860); // 如果未设置,默认为860
try {
new Jim2Mov(new ImageProvider() {
public byte[] getImage(int frame) {
try {
// 设置压缩比
return MovieUtils.convertImageToJPEG((jpgs[frame]), 1.0f);
} catch (IOException e) {
System.err.println(e);
}
return null;
}
}, dmip, null).saveMovie(MovieInfoProvider.TYPE_AVI_MJPEG);
} catch (MovieSaveException e) {
System.err.println(e);
}
System.out.println("create avi success.");
}
/**
* main
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String jpgDirPath = "F:/mysour/video/output/"; // jpg文件夹路径
String aviFileName = "test.avi"; // 生成的avi视频文件名(生成路径为本工程)
int fps = 3; // 每秒播放的帧数
int mWidth = 1440; // 视频的宽度
int mHeight = 860; // 视频的高度
makeVideo.convertPicToAvi(jpgDirPath, aviFileName, fps, mWidth, mHeight);
}
}
这里需要两个jar包。
Jim2mov.jar、jmf.jar。
生成的avi文件在工程目录下。
有个问题,生成的视频不能打开,浏览器报编码问题。
具体还要排查。
java 视频解析_ffmpeg解析视频的每一帧(java )相关推荐
- python ffmpeg 获取视频信息_ffmpeg获取视频信息
php使用ffmpeg获取视频信息可以获取到视频的分辨率.文件大小.播放时长.编码格式.视频格式.音频编码.音频采样频率.等..... 废话不多说,直接上代码.../** * Name: ffmpeg ...
- python提取视频字幕_ffmpeg 提取 视频,音频,字幕 方法
ffmpeg 提取 视频,音频,字幕 方法 (How to Extract Video, Audio, Subtitle from Original Video?) 1. 提取视频 (Extract ...
- 视音频数据处理入门:H.264视频码流解析(java)
参考文献 : 视音频数据处理入门:H.264视频码流解析 测试文件:H264文件 链接:https://pan.baidu.com/s/1eRTJwTsXTgHf2Ez8Inab1A 提取码:1c7 ...
- 解析腾讯视频上传视频源地址网址
公司最近想用小程序播放腾讯视频的视频,由于小程序的微信接口只是调用视频的vid就能进行播放,但是在pc网页上进行播放就要拿到视频的真实地址,然而实际上腾讯视频上传后只是给你一个:https://v.q ...
- 【短视频SDK - 参数解析】对焦模式、裁剪模式、视频质量、分辨率、视频比例、帧率、关键帧间隔等参数解析...
1.参数简析 参数名称 简介 影响 裁剪模式 分为填充模式和裁剪模式 影响图像画面的展示细节 视频质量 是指生成的视频的输出参数,是一组参数决定的数值 视频清晰度和文件大小 分辨率 图像分辨率则是单位 ...
- 深度解析 H.265 视频解决方案
深度解析 H.265 视频解决方案 参考文章: (1)深度解析 H.265 视频解决方案 (2)https://www.cnblogs.com/upyun/p/6963611.html 备忘一下.
- H.264基础知识及视频码流解析
H.264基础知识及视频码流解析 目录 H.264概述 H264相关概念 H264压缩方式 H264分层结构 H264码流结构 H264的NAL单元 H.264视频码流解析及代码实现 1. H.264 ...
- 【Python网络爬虫实战篇】使用selenium+requests爬取下载高清源视频:关于爬取m3u8文件链接解析为ts视频合并成mp4视频的分析实战
这两天博主在摸鱼时,偶然间接触到了流媒体的概念,一时间来了兴致.再加上之前博主有着七.八年的视频制作经验,深知视频素材获取的不易.因此,打算利用自己所学的python网络爬虫的知识,通过编写代码实现获 ...
- 获取腾讯视频真实地址php源码,解析腾讯视频真实地址 - osc_hajrc28s的个人空间 - OSCHINA - 中文开源技术交流社区...
解析腾讯视频真实地址 标签(空格分隔): php 分析 1 我们从腾讯视频上找到的网页链接格式是这样的 https://v.qq.com/x/page/b0136et5ztz.html vid = b ...
最新文章
- 建立企业级产品测试报告体系(概述)
- 简单介绍Tomcat中catalina.out 和 catalina.log的区别和用途
- CF338D GCD Table(拓展中国剩余定理,细节处理,2900分)
- java ExecutorService
- linux第9天 UDP
- ubuntu 14.04使用devstack安装openstack mitaka版本
- 具有Spring Boot和数据功能的Java头优先弹性搜索
- java面试题34下面关于程序编译说法正确的是()
- 网络学习(三)安装VMware Workstation 7
- 月薪2500到年薪20万+,阿迪经历了些什么?
- 全国专业技术人员计算机应用能力考试题,2017年全国专业技术人员计算机应用能力考试题库...
- 友图自动排料软件使用简介
- android积分墙sdk,乐点 Android SDK 积分墙开发者文档
- JNPF快速开发平台-业务流程系统(BPM)开发方案
- 2月书讯(下)| 新年到,新书到!
- 解决numba报错警告:No implementation of function Function found for signature
- win 10新系统连接网络之后,跳过输入微软账户
- foreach变异非变异_神经网络产生了一堆看起来很变异的新动物
- 如何在JSP中使用alert打印变量
- jenkins 插件包
热门文章
- githubusercontent.com被墙
- sqlalchemy-migrate数据库迁移教学
- 信号塔机房有服务器吗,通信铁塔及机房知识
- matlab模拟短波天波,天波传播.ppt
- linux下用squid和squidGuard配置代理服务器
- 基于深度学习的高精度家禽猪检测识别系统(PyTorch+Pyside6+YOLOv5模型)
- python 镜像源配置
- Oracle library OCI.DLL or ORA803.DLL could not be loaded.
- 基于ADAU1452DSP数字音频信号处理
- 2023什么蓝牙耳机好?经销商盘点新手必入蓝牙耳机品牌