JavaCV實現(xiàn)獲取視頻每幀并保存
興趣使然寫的代碼,因為沒有接觸過JavaCV,所以查了很久的API還有依賴包,也使用了openCV來寫過,但是還是遇到很多問題。希望小伙伴指出不足,互相學(xué)習(xí)。
環(huán)境配置:
JavaCV1.4.1(下載Jar包,解壓并提取所需要的Jar。這點耗時比較長,萌新完全不知道需要用什么,看源碼及例子推出)
Java版本:Java10
具體代碼:
package VideoProcessing; 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; /** * TODO:處理視頻.(1.將視頻提取成幀圖片) * * @author ChenP */ public class VideoProcessing { //視頻文件路徑 private static String videoPath = "D:/IdeaTool/video"; //視頻幀圖片存儲路徑 public static String videoFramesPath = "D:/IdeaTool/img"; /** * TODO 將視頻文件幀處理并以“jpg”格式進行存儲。 * 依賴FrameToBufferedImage方法:將frame轉(zhuǎn)換為bufferedImage對象 * * @param videoFileName */ public static void grabberVideoFramer(String videoFileName) { //Frame對象 Frame frame = null; //標識 int flag = 0; /* 獲取視頻文件 */ FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber(videoPath + "/" + videoFileName); try { fFmpegFrameGrabber.start(); /* .getFrameRate()方法:獲取視頻文件信息,總幀數(shù) */ int ftp = fFmpegFrameGrabber.getLengthInFrames(); // System.out.println(fFmpegFrameGrabber.grabKeyFrame()); System.out.println("時長 " + ftp / fFmpegFrameGrabber.getFrameRate() / 60); BufferedImage bImage = null; System.out.println("開始運行視頻提取幀,耗時較長"); while (flag <= ftp) { //文件絕對路徑+名字 String fileName = videoFramesPath + "/img_" + String.valueOf(flag) + ".jpg"; //文件儲存對象 File outPut = new File(fileName); //獲取幀 frame = fFmpegFrameGrabber.grabImage(); // System.out.println(frame); if (frame != null) { ImageIO.write(FrameToBufferedImage(frame), "jpg", outPut); } flag++; } System.out.println("============運行結(jié)束============"); fFmpegFrameGrabber.stop(); } catch (IOException E) { } } public static BufferedImage FrameToBufferedImage(Frame frame) { //創(chuàng)建BufferedImage對象 Java2DFrameConverter converter = new Java2DFrameConverter(); BufferedImage bufferedImage = converter.getBufferedImage(frame); return bufferedImage; } /* 測試..... */ public static void main(String[] args) { String videoFileName = "1.mp4"; grabberVideoFramer(videoFileName); } public static String getVideoPath() { return videoPath; } public static void setVideoPath(String videoPath) { VideoProcessing.videoPath = videoPath; } }
這個代碼耗時比較長,和軟件比起來感覺是稍微長些,不知道有沒有其他BUG。
效果圖:
各位技術(shù)大拿,有什么指點,歡迎提出。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringMVC中@RequestMapping注解的實現(xiàn)
RequestMapping是一個用來處理請求地址映射的注解,本文主要介紹了SpringMVC中@RequestMapping注解的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-01-01SpringMVC中@ModelAttribute注解的使用教程
在SpringMVC中,我們可以通過使用@ModelAttribute注解標記方法,實現(xiàn)類似于Struts2中Preparable攔截器的效果,這篇文章主要給大家介紹了關(guān)于SpringMVC中@ModelAttribute注解使用的相關(guān)資料,需要的朋友可以參考下2021-08-08Java實現(xiàn)PDF轉(zhuǎn)圖片的三種方法
有些時候我們需要在項目中展示PDF,所以我們可以將PDF轉(zhuǎn)為圖片,然后已圖片的方式展示,效果很好,Java使用各種技術(shù)將pdf轉(zhuǎn)換成圖片格式,并且內(nèi)容不失幀,本文給大家介紹了三種方法實現(xiàn)PDF轉(zhuǎn)圖片的案例,需要的朋友可以參考下2023-10-10Spring JDK動態(tài)代理實現(xiàn)過程詳解
這篇文章主要介紹了Spring JDK動態(tài)代理實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02SpringBoot定時任務(wù)多線程實現(xiàn)示例
在真實的Java開發(fā)環(huán)境中,我們經(jīng)常會需要用到定時任務(wù)來幫助我們完成一些特殊的任務(wù),本文主要介紹了SpringBoot定時任務(wù)多線程實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12