1、(JAVA)使用jave获取视频时长

mvn install:install-file -Dfile=E:\jave-1.0.2.jar -DgroupId=it.sauronsoftware -DartifactId=jave -Dversion=1.0.2 -Dpackaging=jar

命令说明:mvn install:install-file -Dfile=jar包的位置 -DgroupId=包的groupId -DartifactId=包的artifactId -Dversion=包的version -Dpackaging=jar

然后pom.xml中引入依赖

it.sauronsoftware

jave

1.0.2

代码(摘自网络)

package com.eya.video;

import it.sauronsoftware.jave.Encoder;

import it.sauronsoftware.jave.MultimediaInfo;

import java.io.File;

/**

*

* description

*

*

* @author ll

* @date 06/11/20 10:23

*/

public class VideoTimeReader {

public static void main(String[] args) {

System.out.println(readTime(new File("E:\\personal\\video\\855558d1dcc2ad522c548cefe6a67bd8.mp4")));

}

// 获取视频时长

private static String readTime(File source) {

Encoder encoder = new Encoder();

String length = "";

try {

MultimediaInfo m = encoder.getInfo(source);

long ls = m.getDuration() / 1000;

int hour = (int) (ls / 3600);

int minute = (int) (ls % 3600) / 60;

int second = (int) (ls - hour * 3600 - minute * 60);

length = hour + "小时" + minute + "分" + second + "秒";

} catch (

Exception e) {

e.printStackTrace();

}

return length;

}

}

2、(JAVA)使用javacv-platform和javacv截取视频帧作为视频封面,支持直接通过视频网络地址截取帧

引入jar包,注意这2个包的版本需要匹配,不然会出错

org.bytedeco

javacv-platform

1.4.1

org.bytedeco

javacv

1.4.1

编写java代码

package com.eya.video;

import org.apache.commons.io.IOUtils;

import org.bytedeco.javacv.FFmpegFrameGrabber;

import org.bytedeco.javacv.Frame;

import org.bytedeco.javacv.Java2DFrameConverter;

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

import java.util.UUID;

/**

*

* description

*

*

* @author ll

* @date 06/04/20 10:29

*/

public class VideoCoverCut {

/**

* 截取视频第六帧的图片

*

* @param filePath 视频路径

* @param dir 文件存放的根目录

* @return 图片的相对路径 例:pic/1.png

*/

public static String videoImage(String filePath, String dir) throws Exception {

String pngPath = "";

// FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);

FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(new File(filePath));

ff.start();

int ffLength = ff.getLengthInFrames();

Frame f;

int i = 0;

while (i < ffLength) {

f = ff.grabFrame();

//截取第6帧

if ((i > 5) && (f.image != null)) {

//生成图片的相对路径 例如:pic/uuid.png

pngPath = getPngPath();

//执行截图并放入指定位置

System.out.println("存储图片 : " + (dir + pngPath));

doExecuteFrame(f, dir + pngPath);

break;

}

i++;

}

ff.stop();

return pngPath;

}

/**

* 截取视频第六帧的图片

*

* @param url 网络视频地址

* @param dir 文件存放的根目录

* @return 图片的相对路径 例:pic/1.png

*/

public static String getVideoCoverByURL(String url, String dir) throws Exception {

InputStream videoInputStream = getVideoInputStream(url);

String pngPath = "";

FFmpegFrameGrabber ff = new FFmpegFrameGrabber(videoInputStream);

ff.start();

int ffLength = ff.getLengthInFrames();

Frame f;

int i = 0;

while (i < ffLength) {

f = ff.grabFrame();

//截取第6帧

if ((i > 5) && (f.image != null)) {

//生成图片的相对路径 例如:pic/uuid.png

pngPath = getPngPath();

//执行截图并放入指定位置

System.out.println("存储图片 : " + (dir + pngPath));

doExecuteFrame(f, dir + pngPath);

break;

}

i++;

}

ff.stop();

IOUtils.closeQuietly(videoInputStream);

return pngPath;

}

/**

* 将网络视频地址,转成输入流

*

* @param videoUrl

* @return

*/

private static InputStream getVideoInputStream(String videoUrl) {

// 1.下载网络文件

try {

URL url = new URL(videoUrl);

//2.获取链接

URLConnection conn = url.openConnection();

//3.输入流

InputStream inStream = conn.getInputStream();

return inStream;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

* 生成图片的相对路径

*

* @return 图片的相对路径 例:pic/1.png

*/

private static String getPngPath() {

return getUUID() + ".png";

}

/**

* 生成唯一的uuid

*

* @return uuid

*/

private static String getUUID() {

return UUID.randomUUID().toString().replace("-", "");

}

/**

* 截取缩略图

*

* @param f Frame

* @param targerFilePath:封面图片存放路径

*/

private static void doExecuteFrame(Frame f, String targerFilePath) {

String imagemat = "png";

if (null == f || null == f.image) {

return;

}

Java2DFrameConverter converter = new Java2DFrameConverter();

BufferedImage bi = converter.getBufferedImage(f);

File output = new File(targerFilePath);

try {

ImageIO.write(bi, imagemat, output);

} catch (IOException e) {

e.printStackTrace();

}

}

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

// videoImage("E:\\personal\\video\\855558d1dcc2ad522c548cefe6a67bd8.mp4", "E:\\");

getVideoCoverByURL("http://video.zhihuishu.com/zhs/ablecommons/demo/201806/dddee1c446314b84a26c74a8def3c3c7.mp4", "E:\\");

}

}

3、(H5)使用H5的video获取视频的时长、截取视频图片作为封面,基于VUE语法

Vue通过视频地址获取时长和封面

地址:{{video}}

crossOrigin='*' @loadeddata="loadedListener">

new Vue({

el: '#app',

data: {

video: 'http://video.zhihuishu.com/zhs/ablecommons/demo/201806/dddee1c446314b84a26c74a8def3c3c7.mp4',

cover: ''

},

created() {

},

methods: {

getDuration() {

alert(this.$refs.divVideo);

},

loadedListener() {

if (this.video && this.$refs.divVideo && this.$refs.divVideo.readyState === 4) {

// 获取到的视频时长(s)

console.log(parseInt(this.$refs.divVideo.duration));

// console.log(this.$refs.divVideo)

_this = this;

// 截取封面,video标签内使用了autoplay让视频自动播放,这里设定延时2秒开始截图作为封面

setTimeout(function () {

var canvas = document.createElement("canvas");

console.log(canvas)

canvas.width = _this.$refs.divVideo.videoWidth * 0.8;

canvas.height = _this.$refs.divVideo.videoHeight * 0.8;

canvas.getContext('2d').drawImage(_this.$refs.divVideo, 0, 0, canvas.width, canvas

.height);

// 生成图片(base64)

const dataUrl = canvas.toDataURL('image/png')

_this.cover = dataUrl

// console.log(dataUrl)

// 截图完毕,停止视频

_this.$refs.divVideo.pause()

}, 2000)

}

}

}

})

java 截取视频_2种方式获取视频时长、截取视频帧作为封面(java or H5)相关推荐

  1. html javascript 音频、视频、 mp3 、mp4 的播放、暂停、重新播放、获取音频时长、视频自动全屏播放

    html javascript 音频.视频. mp3 .mp4 的播放.暂停.重新播放.获取音频时长 视频 https://www.bilibili.com/video/BV1WE411o7Ft?fr ...

  2. java 字符串截取的几种方式 java获取当前路径的几种方法

    java 字符串截取的几种方式: https://blog.csdn.net/qq_27603235/article/details/51604584 java获取当前路径的几种方法: https:/ ...

  3. Java操作Excel三种方式POI、Hutool、EasyExcel

    Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...

  4. java创建对象的五种方式

    java创建对象的五种方式 一.使用new关键字 二.使用clone方法 三.使用反序列化 四.使用反射 五.使用Unsafe 一.使用new关键字 如 User user=new User(); 执 ...

  5. java实现线程三种方式_详解三种java实现多线程的方式

    java中实现多线程的方法有两种:继承Thread类和实现runnable接口. 1.继承Thread类,重写父类run()方法 public class thread1 extends Thread ...

  6. Spring MVC 实战:三种方式获取登录用户信息

    前言 Web 项目中,维持用户登录状态的常用方式有三种,分别是 Cookie.Session.Token,不管哪种方案,都需要获取到用户信息供业务层使用. 由于获取用户信息与具体业务无关,因此在普通的 ...

  7. Java技术分享:升级所安装Java版本的两种方式

    在进行Java开发的时候我们可能会需要升级所安装的Java版本,那么你知道应该如何安装吗?小千今天就来给大家介绍两种方式. 一.卸载掉原本安装的Java,下载最新安装包安装即可. 这个步骤就不介绍了, ...

  8. Android之通过文件绝对路径获取音视频的时长和视频的缩略图

    1 需求 遍历一个文件夹,需要获取音视频的时长和视频的第一帧图像 2 关键代码实现 获取本地音视频的时长(这里计算出来的是秒为单位),如果文件不是音视频,下面的函数会发生异常,也就是返回0,我们除了通 ...

  9. 2种方式获取StreamingAssets下音频

    第一种 unityWebRequest var unityWebRequest = UnityWebRequest.GetAudioClip(s, 0);yield return unityWebRe ...

  10. Linux之Ubuntu20.04安装Java JDK8的两种方式

    Linux之Ubuntu20.04远程安装Java JDK8的两种方式 安装openjdk8 更新软件包列表: sudo apt-get update 安装openjdk-8-jdk: sudo ap ...

最新文章

  1. c语言int t格式,如何在C中打印int64_t类型
  2. 安装配置Statspack
  3. 用WINRAR巧妙分割大压缩包
  4. docker for windows could not read CA certificate【转】
  5. Android Telephony分析(五) ---- TelephonyRegistry详解
  6. C经典之14-双向链表存储1-10---ShinePans
  7. vs2019功能介绍_MFC界面库BCGControlBar v30.0新功能详解:支持VS 2019
  8. 世界上迄今为止最安全的加密算法
  9. RMQ问题-ST表倍增处理静态区间最值
  10. java 转json_Java转JSON串的几种方式
  11. Qt4_使用SAX读取XML
  12. python决策评价模型_Python大规模建模的特征值选择和性能评估方法详解
  13. SHELL判断文件是否包含某个字串
  14. 前端——HTML百度首页制作
  15. linux内核源码分析之虚拟内存映射
  16. python自动生成文章原创_Python文章原创度检测脚本【亲测有效】
  17. Oracle 官方文档在线查看Oracle函数
  18. 2022年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】
  19. LINUX rhcsa小练习题(创建文件/目录,移动/复制文件,重定向/追加重定向,创建别名)
  20. linux bt 命令行,在Linux终端下进行BT下载

热门文章

  1. 集团类企业信息化原则与思路
  2. 使用select2 实现拼音全拼和首字母 搜索
  3. NODA-GA-NHS ester CAS:1407166-70-4 大环配体配合物
  4. 怎样取消php加密mppe,PHP 加密问题 求大神帮忙? 谢谢
  5. Android更改开机画面
  6. pow是什么意思python,python中pow什么意思
  7. 里氏代换原则(企鹅是不是鸟!)
  8. chapter1 静态分析技术-09资源节查看 resource hacker
  9. loj6225「网络流 24 题」火星探险问题
  10. android 字体设置为中等粗细