前置条件:下载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 )相关推荐

  1. python ffmpeg 获取视频信息_ffmpeg获取视频信息

    php使用ffmpeg获取视频信息可以获取到视频的分辨率.文件大小.播放时长.编码格式.视频格式.音频编码.音频采样频率.等..... 废话不多说,直接上代码.../** * Name: ffmpeg ...

  2. python提取视频字幕_ffmpeg 提取 视频,音频,字幕 方法

    ffmpeg 提取 视频,音频,字幕 方法 (How to Extract Video, Audio, Subtitle from Original Video?) 1. 提取视频 (Extract ...

  3. 视音频数据处理入门:H.264视频码流解析(java)

    参考文献 : 视音频数据处理入门:H.264视频码流解析 测试文件:H264文件 链接:https://pan.baidu.com/s/1eRTJwTsXTgHf2Ez8Inab1A  提取码:1c7 ...

  4. 解析腾讯视频上传视频源地址网址

    公司最近想用小程序播放腾讯视频的视频,由于小程序的微信接口只是调用视频的vid就能进行播放,但是在pc网页上进行播放就要拿到视频的真实地址,然而实际上腾讯视频上传后只是给你一个:https://v.q ...

  5. 【短视频SDK - 参数解析】对焦模式、裁剪模式、视频质量、分辨率、视频比例、帧率、关键帧间隔等参数解析...

    1.参数简析 参数名称 简介 影响 裁剪模式 分为填充模式和裁剪模式 影响图像画面的展示细节 视频质量 是指生成的视频的输出参数,是一组参数决定的数值 视频清晰度和文件大小 分辨率 图像分辨率则是单位 ...

  6. 深度解析 H.265 视频解决方案

    深度解析 H.265 视频解决方案 参考文章: (1)深度解析 H.265 视频解决方案 (2)https://www.cnblogs.com/upyun/p/6963611.html 备忘一下.

  7. H.264基础知识及视频码流解析

    H.264基础知识及视频码流解析 目录 H.264概述 H264相关概念 H264压缩方式 H264分层结构 H264码流结构 H264的NAL单元 H.264视频码流解析及代码实现 1. H.264 ...

  8. 【Python网络爬虫实战篇】使用selenium+requests爬取下载高清源视频:关于爬取m3u8文件链接解析为ts视频合并成mp4视频的分析实战

    这两天博主在摸鱼时,偶然间接触到了流媒体的概念,一时间来了兴致.再加上之前博主有着七.八年的视频制作经验,深知视频素材获取的不易.因此,打算利用自己所学的python网络爬虫的知识,通过编写代码实现获 ...

  9. 获取腾讯视频真实地址php源码,解析腾讯视频真实地址 - osc_hajrc28s的个人空间 - OSCHINA - 中文开源技术交流社区...

    解析腾讯视频真实地址 标签(空格分隔): php 分析 1 我们从腾讯视频上找到的网页链接格式是这样的 https://v.qq.com/x/page/b0136et5ztz.html vid = b ...

最新文章

  1. 建立企业级产品测试报告体系(概述)
  2. 简单介绍Tomcat中catalina.out 和 catalina.log的区别和用途
  3. CF338D GCD Table(拓展中国剩余定理,细节处理,2900分)
  4. java ExecutorService
  5. linux第9天 UDP
  6. ubuntu 14.04使用devstack安装openstack mitaka版本
  7. 具有Spring Boot和数据功能的Java头优先弹性搜索
  8. java面试题34下面关于程序编译说法正确的是()
  9. 网络学习(三)安装VMware Workstation 7
  10. 月薪2500到年薪20万+,阿迪经历了些什么?
  11. 全国专业技术人员计算机应用能力考试题,2017年全国专业技术人员计算机应用能力考试题库...
  12. 友图自动排料软件使用简介
  13. android积分墙sdk,乐点 Android SDK 积分墙开发者文档
  14. JNPF快速开发平台-业务流程系统(BPM)开发方案
  15. 2月书讯(下)| 新年到,新书到!
  16. 解决numba报错警告:No implementation of function Function found for signature
  17. win 10新系统连接网络之后,跳过输入微软账户
  18. foreach变异非变异_神经网络产生了一堆看起来很变异的新动物
  19. 如何在JSP中使用alert打印变量
  20. jenkins 插件包

热门文章

  1. githubusercontent.com被墙
  2. sqlalchemy-migrate数据库迁移教学
  3. 信号塔机房有服务器吗,通信铁塔及机房知识
  4. matlab模拟短波天波,天波传播.ppt
  5. linux下用squid和squidGuard配置代理服务器
  6. 基于深度学习的高精度家禽猪检测识别系统(PyTorch+Pyside6+YOLOv5模型)
  7. python 镜像源配置
  8. Oracle library OCI.DLL or ORA803.DLL could not be loaded.
  9. 基于ADAU1452DSP数字音频信号处理
  10. 2023什么蓝牙耳机好?经销商盘点新手必入蓝牙耳机品牌