日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 截取视频_2种方式获取视频时长、截取视频帧作为封面(java or H5) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、(JAVA)使用jave獲取視頻時(shí)長

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

代碼(摘自網(wǎng)絡(luò))

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")));

}

// 獲取視頻時(shí)長

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 + "小時(shí)" + minute + "分" + second + "秒";

} catch (

Exception e) {

e.printStackTrace();

}

return length;

}

}

2、(JAVA)使用javacv-platform和javacv截取視頻幀作為視頻封面,支持直接通過視頻網(wǎng)絡(luò)地址截取幀

引入jar包,注意這2個(gè)包的版本需要匹配,不然會(huì)出錯(cuò)

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 圖片的相對(duì)路徑 例: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)) {

//生成圖片的相對(duì)路徑 例如:pic/uuid.png

pngPath = getPngPath();

//執(zhí)行截圖并放入指定位置

System.out.println("存儲(chǔ)圖片 : " + (dir + pngPath));

doExecuteFrame(f, dir + pngPath);

break;

}

i++;

}

ff.stop();

return pngPath;

}

/**

* 截取視頻第六幀的圖片

*

* @param url 網(wǎng)絡(luò)視頻地址

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

* @return 圖片的相對(duì)路徑 例: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)) {

//生成圖片的相對(duì)路徑 例如:pic/uuid.png

pngPath = getPngPath();

//執(zhí)行截圖并放入指定位置

System.out.println("存儲(chǔ)圖片 : " + (dir + pngPath));

doExecuteFrame(f, dir + pngPath);

break;

}

i++;

}

ff.stop();

IOUtils.closeQuietly(videoInputStream);

return pngPath;

}

/**

* 將網(wǎng)絡(luò)視頻地址,轉(zhuǎn)成輸入流

*

* @param videoUrl

* @return

*/

private static InputStream getVideoInputStream(String videoUrl) {

// 1.下載網(wǎng)絡(luò)文件

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;

}

/**

* 生成圖片的相對(duì)路徑

*

* @return 圖片的相對(duì)路徑 例: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獲取視頻的時(shí)長、截取視頻圖片作為封面,基于VUE語法

Vue通過視頻地址獲取時(shí)長和封面

地址:{{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) {

// 獲取到的視頻時(shí)長(s)

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

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

_this = this;

// 截取封面,video標(biāo)簽內(nèi)使用了autoplay讓視頻自動(dòng)播放,這里設(shè)定延時(shí)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)

}

}

}

})

總結(jié)

以上是生活随笔為你收集整理的java 截取视频_2种方式获取视频时长、截取视频帧作为封面(java or H5)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩在线观看免费av | 精品在线视频播放 | 91激情| 欧美极品少妇xxxxⅹ猛交 | 黑人一区二区三区 | 黄色一级免费观看 | 日韩av三级在线 | 美女又爽又黄视频 | chinese hd av| 白浆在线播放 | 碰在线视频| 精品人妻一区二区三区含羞草 | av自拍偷拍 | 亚洲精品乱码久久久久久蜜桃麻豆 | xxx.国产| 亚洲色图国产视频 | 国产成人99久久亚洲综合精品 | 黑帮大佬和我的365日第二部 | 亚洲天堂高清 | 久久亚洲影院 | 国产69精品久久久久久久 | 日韩三级黄色 | 成人国产一区二区三区精品麻豆 | 日本三级黄在线观看 | 欧美日韩视频一区二区 | 中文字幕在线观看1 | 夜夜操天天射 | 七月色| 久久久这里有精品 | 欧美美女一区 | 久久99九九| 精品国精品国产自在久不卡 | 欧美专区日韩专区 | 久久成人综合网 | 韩国欧美三级 | 国产成人精品一区二区三区四区 | 高h喷水荡肉少妇爽多p视频 | 亚洲精品视频国产 | 欧美色国| av少妇 | 欧美不卡高清 | 欧美一级二级三级视频 | 欧美视频一区二区三区 | 91久久精品国产91久久性色tv | www.亚洲一区二区三区 | 国产伦精品免费视频 | 亚洲在线观看免费 | 五月天丁香社区 | 99久久精品免费看国产四区 | 久久六| a天堂中文| 久久久噜噜噜久久久 | av剧情在线| av网天堂 | 国产美女免费观看 | 女人被男人躁得好爽免费视频 | 国产99热| 国产成人av片 | 亚洲一区二区动漫 | 国产精品swag | 天堂亚洲精品 | 亚洲色图校园春色 | 国产日产欧洲无码视频 | 中国丰满老太hd | a一级黄色片 | 国产午夜无码视频在线观看 | 欧美在线视频一区二区三区 | 欧美日韩高清在线观看 | 色综合久久88 | 色婷婷久久五月综合成人 | 日本一区二区三区四区在线观看 | 欧美丰满熟妇bbbbbb百度 | av一级久久 | 欧美日韩另类在线 | 黄色小视频免费看 | 天堂在线中文字幕 | 亚洲一 | 人人超碰人人 | 色综合天天色综合 | 日韩欧美亚 | 国产剧情av引诱维修工 | 亚洲精品乱码久久久久久蜜桃动漫 | 男人天堂资源网 | 中国女人特级毛片 | 99在线精品视频免费观看软件 | 成人性视频网站 | 在线免费小电影 | 超碰丝袜 | 日本少妇18p| 久久婷婷丁香 | 亚洲双插| 成年人天堂| 在线操| a级片中文字幕 | 日本一区二区视频在线观看 | 日本欧美亚洲 | 国产原创在线 | 住在隔壁的她动漫免费观看全集下载 | 69天堂|