您好,登錄后才能下訂單哦!
興趣使然寫的代碼,因為沒有接觸過JavaCV,所以查了很久的API還有依賴包,也使用了openCV來寫過,但是還是遇到很多問題。希望小伙伴指出不足,互相學習。
環境配置:
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轉換為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()方法:獲取視頻文件信息,總幀數 */ 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("============運行結束============"); fFmpegFrameGrabber.stop(); } catch (IOException E) { } } public static BufferedImage FrameToBufferedImage(Frame frame) { //創建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。
效果圖:
各位技術大拿,有什么指點,歡迎提出。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。