国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 截取視頻資料中的某一幀作為縮略圖

Java 截取視頻資料中的某一幀作為縮略圖

2022-01-05 10:55小小張自由—>張有博 Java教程

最近項目中有一個需求,就是Java 截取視頻資料中的某一幀作為縮略圖,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

最近項目中有一個需求,就是要實現(xiàn)視頻資料的收藏功能,當時想了想,收藏記錄實現(xiàn)并不是很難,但是想展現(xiàn)出視頻的縮略圖,就要想想其他辦法了,所以就想到了截取視頻資料中的某一幀作為縮略圖,我沒有選擇截取第一幀,選擇的是第五幀,因為第一幀可能沒有內(nèi)容。

基礎知識

JavaCV:功能很強大,封裝了很多很視頻、圖片相關的內(nèi)容。

JavaCV 是一款基于JavaCPP

調用方式(JNI的一層封裝),由多種開源計算機視覺庫組成的包裝庫,封裝了包含F(xiàn)Fmpeg、OpenCV、tensorflow、caffe、tesseract、libdc1394、OpenKinect、videoInput和ARToolKitPlus等在內(nèi)的計算機視覺領域的常用庫和實用程序類。

JavaCV基于Apache License Version 2.0協(xié)議和GPLv2兩種協(xié)議 ,

JavaCV支持Windows、Linux、MacOS,Android、IOS在內(nèi)的Java平臺上調用這些接口。

FFmpegFrameGrabber

FFmpegFrameGrabber可以理解為解碼器,也可以理解為幀收集器,可以獲取視頻資料的各種詳細信息,時長,寬高,幀等,很強大。

BufferedImage,ImageIO

BufferedImage類是Image的一個子類,是一個帶緩沖區(qū)圖像類,主要作用是將一幅圖片加載到內(nèi)存中。

ImageIO提供read()和write()靜態(tài)方法,讀寫照片

將圖片加載到內(nèi)存中

?
1
2
3
//需要是一個本地文件
String imgPath = "?C:\Users\Administrator\Videos\999.jpg"
BufferedImage image = ImageIO.read(new FileInputStream(imgPath));

 將內(nèi)存中的圖片寫到本地

?
1
2
3
4
5
6
7
BufferedImage bi=~某個值
File outputfile  = new File("save.png");
//參數(shù)
// bi:要寫入的RenderedImage
// png:格式類型
// outputfile:要寫入的OutputStream
ImageIO.write(bi,"png",outputfile);

MultipartFile

MultipartFile在上一篇文章中介紹過了。

Java文件上傳實例并解決跨域問題

具體實現(xiàn)

引入依賴

本功能使用的Jar包是javacv,javacv-platform。因為這個包有150多M,很多依賴項都用不到,所以,將不需要的移除取出。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<!--start:視頻獲取某一幀的圖片-->
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv</artifactId>
    <version>1.4.4</version>
    <exclusions>
        <exclusion>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacpp</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>flycapture</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libdc1394</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libfreenect</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libfreenect2</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>librealsense</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>videoinput</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>opencv</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>tesseract</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>leptonica</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>flandmark</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>artoolkitplus</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv-platform</artifactId>
    <version>1.4.4</version>
    <exclusions>
        <exclusion>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>flycapture-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libdc1394-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libfreenect-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>libfreenect2-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>librealsense-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>videoinput-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>opencv-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>tesseract-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>leptonica-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>flandmark-platform</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>artoolkitplus-platform</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--end:視頻獲取某一幀的圖片-->

Java代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
 * 將視頻文件幀處理并以“jpg”格式進行存儲。
 * 依賴FrameToBufferedImage方法:將frame轉換為bufferedImage對象
 * 參數(shù)可串本地文件,或者網(wǎng)絡文件
 * @param videoFileName http://d-godone.dmsd.tech/goDone/M00/00/0A/wKg8O2D2mnqEMg7wAAAAALbl5Ys275.mp4
 */
public  String videoFramer(String videoFileName){
    //最后獲取到的視頻的圖片的路徑
    String videPicture="";
    //Frame對象
    Frame frame = null;
    //標識
    int flag = 0;
    try {
         /*
        獲取視頻文件
        */
        FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber( videoFileName);
        log.info("開始截取視頻:");
//            av_register_all();//解決報錯 avformat_open_input() error -138: Could not open input
//            avcodec_register_all();
//          當視頻打不開時,會報錯
        fFmpegFrameGrabber.start();
        //獲取視頻總幀數(shù)
        int ftp = fFmpegFrameGrabber.getLengthInFrames();
        log.info("時長 " + ftp / fFmpegFrameGrabber.getFrameRate() / 60);
 
        while (flag <= ftp) {
            //獲得每一幀
            frame = fFmpegFrameGrabber.grabImage();
            /*
            對視頻的第五幀進行處理
             */
            if (frame != null && flag==5) {
 
               //將文件轉換
                BufferedImage bufferedImage = FrameToBufferedImage(frame);
                //將bufferedImage轉換成MultipartFile--方便文件上傳
                MultipartFile multipartFile = fileCase(bufferedImage);
                log.info("開始文件上傳:");
                //文件上傳--上傳到FastDFS中,并返回URL
                String fileLoad = fileLoad(multipartFile);
 
                videPicture=fileLoad;
                log.info("文件上傳成功{}",fileLoad);
                break;
            }
            flag++;
        }
        fFmpegFrameGrabber.stop();
        fFmpegFrameGrabber.close();
    } catch (Exception E) {
        E.printStackTrace();
    }
    return videPicture;
}

兩個文件類型轉換的方法Frame->BufferedImage->MultipartFile

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
 * 文件轉換,將Frame轉換成BufferedImage
 * @param frame Frame
 * @return
 */
public static BufferedImage FrameToBufferedImage(Frame frame) {
    //創(chuàng)建BufferedImage對象
    Java2DFrameConverter converter = new Java2DFrameConverter();
    BufferedImage bufferedImage = converter.getBufferedImage(frame);
    return bufferedImage;
}
 
 
/**
 * 文件轉換將BufferedImage轉換成MultipartFile:為了文件上傳
 * @param image
 * @return
 */
public static MultipartFile fileCase(BufferedImage image){
    //得到BufferedImage對象
   // BufferedImage bufferedImage = JoinTwoImage.testEncode(200, 200, url);
    MultipartFile multipartFile= null;
    try {
        //創(chuàng)建一個ByteArrayOutputStream
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        //把BufferedImage寫入ByteArrayOutputStream
        ImageIO.write(image, "jpg", os);
        //ByteArrayOutputStream轉成InputStream
        InputStream input = new ByteArrayInputStream(os.toByteArray());
        //InputStream轉成MultipartFile
        multipartFile =new MockMultipartFile("file", "file.jpg", "text/plain", input);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return multipartFile;
}

到此這篇關于Java 截取視頻資料中的某一幀作為縮略圖的文章就介紹到這了,更多相關Java 視頻縮略圖內(nèi)容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/promsing/article/details/120291489

延伸 · 閱讀

精彩推薦
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java實現(xiàn)搶紅包功能

    Java實現(xiàn)搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現(xiàn)了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
主站蜘蛛池模板: 欧美精品免费在线 | 久久99精品国产99久久6尤 | 日韩av片无码一区二区不卡电影 | 中文字幕免费播放 | 欧美性猛交一区二区三区精品 | 欧美一区视频 | 日日视频| 亚洲精品国产精品国自产在线 | 亚洲视频精品在线观看 | ts人妖另类精品视频系列 | 最新国产在线视频 | www.99精品 | 日韩在线欧美 | 日日操操| 亚洲毛片网站 | 国产毛片毛片毛片 | 91精品一区二区三区久久久久久 | 国产一区二区免费 | 久久免费精品视频 | 欧美日韩第一页 | 一区视频在线 | 精品视频久久 | 欧美一区二区 | 国产精品99一区二区三区 | 国产成人精品一区二区三区四区 | 亚洲精品日韩激情在线电影 | 水密桃av | 日韩成人欧美 | 91精品久久久久久综合五月天 | 国产免费性 | 午夜看片 | 欧美一级二级三级视频 | 成人av在线电影 | 欧美a级免费看 | 成人av免费观看 | 亚洲区视频 | 久久毛片 | 久久久精品国产亚洲 | a资源在线观看 | 国产在线a | 欧美精品一区二区三区一线天视频 |