興趣使然寫的代碼,因為沒有接觸過JavaCV,所以查了很久的API還有依賴包,也使用了openCV來寫過,但是還是遇到很多問題。希望小伙伴指出不足,互相學(xué)習(xí)。
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)合浦,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
環(huán)境配置:
JavaCV1.4.1(下載Jar包,解壓并提取所需要的Jar。這點(diǎn)耗時比較長,萌新完全不知道需要用什么,看源碼及例子推出)
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”格式進(jìn)行存儲。 * 依賴FrameToBufferedImage方法:將frame轉(zhuǎn)換為bufferedImage對象 * * @param videoFileName */ public static void grabberVideoFramer(String videoFileName) { //Frame對象 Frame frame = null; //標(biāo)識 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("開始運(yùn)行視頻提取幀,耗時較長"); 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("============運(yùn)行結(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ù)大拿,有什么指點(diǎn),歡迎提出。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。