亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java使用ffmpeg和mencoder實現視頻轉碼

2024-07-14 08:43:13
字體:
來源:轉載
供稿:網友

本文為大家分享了Java使用ffmpeg和mencoder實現視頻轉碼的具體代碼,供大家參考,具體內容如下

準備:

需要下載ffmpeg和mencoder,百度一搜就有了,請自行下載。

不墨跡,上代碼:

1)首先需要定義幾個量:Contants.java

public class Contants { public static final String ffmpegpath = "D://DevTools//ffmpeg//bin//ffmpeg.exe";//ffmpeg的安裝位置 public static final String mencoderpath = "D://DevTools//mencoder//"; // mencoder的目錄  public static final String videofolder = "D://tools//video//"; // 需要被轉換格式的視頻目錄 public static final String targetfolder = "D://tools//target//"; // 轉換后視頻的目錄  public static final String videoRealPath = "D://tools//target//"; // 需要被截圖的視頻目錄; public static final String imageRealPath = "D://tools//imgs//"; // 截圖的存放目錄}

2)其次,就是Utils類了,具體里面有注釋:ConverVideoUtils.java

import java.io.File;import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.List; import com.wdy.common.Contants; public class ConverVideoUtils { private Date dt; private long begintime; private String sourceVideoPath;//源視頻路徑 private String filerealname; // 文件名 不包括擴展名 private String filename; // 包括擴展名 private String videofolder = Contants.videofolder; // 別的格式視頻的目錄 private String targetfolder = Contants.targetfolder; // flv視頻的目錄 private String ffmpegpath = Contants.ffmpegpath; // ffmpeg.exe的目錄 private String mencoderpath = Contants.mencoderpath; // mencoder的目錄 private String imageRealPath = Contants.imageRealPath; // 截圖的存放目錄  public ConverVideoUtils() { }  public ConverVideoUtils(String path) { sourceVideoPath = path; }  public String getPATH() { return sourceVideoPath; }  public void setPATH(String path) { sourceVideoPath = path; }  /** * 轉換視頻格式 * @param String targetExtension 目標視頻擴展名 .xxx  * @param isDelSourseFile 轉換完成后是否刪除源文件 * @return */ public boolean beginConver(String targetExtension, boolean isDelSourseFile) { File fi = new File(sourceVideoPath); filename = fi.getName(); filerealname = filename.substring(0, filename.lastIndexOf(".")).toLowerCase(); System.out.println("----接收到文件(" + sourceVideoPath + ")需要轉換-------------------------- "); if (!checkfile(sourceVideoPath)) { System.out.println(sourceVideoPath + "文件不存在" + " "); return false; } dt = new Date(); begintime = dt.getTime(); System.out.println("----開始轉文件(" + sourceVideoPath + ")-------------------------- "); if (process(targetExtension,isDelSourseFile)) { Date dt2 = new Date(); System.out.println("轉換成功 "); long endtime = dt2.getTime(); long timecha = (endtime - begintime); String totaltime = sumTime(timecha); System.out.println("轉換視頻格式共用了:" + totaltime + " "); if (processImg(sourceVideoPath)) { System.out.println("截圖成功了! "); } else { System.out.println("截圖失敗了! "); } if (isDelSourseFile) { deleteFile(sourceVideoPath); } sourceVideoPath = null; return true; } else { sourceVideoPath = null; return false; } }  /** * 對視頻進行截圖 * @param sourceVideoPath 需要被截圖的視頻路徑(包含文件名和擴展名) * @return */ public boolean processImg(String sourceVideoPath) { if (!checkfile(sourceVideoPath)) { System.out.println(sourceVideoPath + " is not file"); return false; } File fi = new File(sourceVideoPath); filename = fi.getName(); filerealname = filename.substring(0, filename.lastIndexOf(".")).toLowerCase(); List<String> commend = new java.util.ArrayList<String>(); //第一幀: 00:00:01 //time ffmpeg -ss 00:00:01 -i test1.flv -f image2 -y test1.jpg commend.add(ffmpegpath);// commend.add("-i");// commend.add(videoRealPath + filerealname + ".flv");// commend.add("-y");// commend.add("-f");// commend.add("image2");// commend.add("-ss");// commend.add("38");// commend.add("-t");// commend.add("0.001");// commend.add("-s");// commend.add("320x240"); commend.add("-ss"); commend.add("00:00:01"); commend.add("-i"); commend.add(sourceVideoPath); commend.add("-f"); commend.add("image2"); commend.add("-y"); commend.add(imageRealPath + filerealname + ".jpg"); try { ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); builder.start(); return true; } catch (Exception e) { e.printStackTrace(); return false; } }  /** * 實際轉換視頻格式的方法 * @param targetExtension 目標視頻擴展名 * @param isDelSourseFile 轉換完成后是否刪除源文件 * @return */ private boolean process(String targetExtension, boolean isDelSourseFile) { int type = checkContentType(); boolean status = false; if (type == 0) { //如果type為0用ffmpeg直接轉換 status = processVideoFormat(sourceVideoPath,targetExtension, isDelSourseFile); } else if (type == 1) { //如果type為1,將其他文件先轉換為avi,然后在用ffmpeg轉換為指定格式 String avifilepath = processAVI(type); if (avifilepath == null){ // avi文件沒有得到 return false; }else { System.out.println("開始轉換:"); status = processVideoFormat(avifilepath,targetExtension, isDelSourseFile); } } return status; }  /** * 檢查文件類型 * @return */ private int checkContentType() { String type = sourceVideoPath.substring(sourceVideoPath.lastIndexOf(".") + 1, sourceVideoPath.length()).toLowerCase(); // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) if (type.equals("avi")) { return 0; } else if (type.equals("mpg")) { return 0; } else if (type.equals("wmv")) { return 0; } else if (type.equals("3gp")) { return 0; } else if (type.equals("mov")) { return 0; } else if (type.equals("mp4")) { return 0; } else if (type.equals("asf")) { return 0; } else if (type.equals("asx")) { return 0; } else if (type.equals("flv")) { return 0; } // 對ffmpeg無法解析的文件格式(wmv9,rm,rmvb等), // 可以先用別的工具(mencoder)轉換為avi(ffmpeg能解析的)格式. else if (type.equals("wmv9")) { return 1; } else if (type.equals("rm")) { return 1; } else if (type.equals("rmvb")) { return 1; } return 9; }  /** * 檢查文件是否存在 * @param path * @return */ private boolean checkfile(String path) { File file = new File(path); if (!file.isFile()) { return false; } else { return true; } }  /** * 對ffmpeg無法解析的文件格式(wmv9,rm,rmvb等), 可以先用別的工具(mencoder)轉換為avi(ffmpeg能解析的)格式. * @param type * @return */ private String processAVI(int type) { List<String> commend = new java.util.ArrayList<String>(); commend.add(mencoderpath); commend.add(sourceVideoPath); commend.add("-oac"); commend.add("mp3lame"); commend.add("-lameopts"); commend.add("preset=64"); commend.add("-ovc"); commend.add("xvid"); commend.add("-xvidencopts"); commend.add("bitrate=600"); commend.add("-of"); commend.add("avi"); commend.add("-o"); commend.add(videofolder + filerealname + ".avi"); // 命令類型:mencoder 1.rmvb -oac mp3lame -lameopts preset=64 -ovc xvid // -xvidencopts bitrate=600 -of avi -o rmvb.avi try { ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); Process p = builder.start(); doWaitFor(p); return videofolder + filerealname + ".avi"; } catch (Exception e) { e.printStackTrace(); return null; } }  /** * 轉換為指定格式 * ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) * @param oldfilepath * @param targetExtension 目標格式擴展名 .xxx * @param isDelSourseFile 轉換完成后是否刪除源文件 * @return */ private boolean processVideoFormat(String oldfilepath, String targetExtension, boolean isDelSourceFile) { if (!checkfile(sourceVideoPath)) { System.out.println(oldfilepath + " is not file"); return false; } //ffmpeg -i FILE_NAME.flv -ar 22050 NEW_FILE_NAME.mp4 List<String> commend = new java.util.ArrayList<>(); commend.add(ffmpegpath); commend.add("-i"); commend.add(oldfilepath); commend.add("-ar"); commend.add("22050"); commend.add(targetfolder + filerealname + targetExtension); try { ProcessBuilder builder = new ProcessBuilder(); String cmd = commend.toString(); builder.command(commend); Process p = builder.start(); doWaitFor(p); p.destroy(); //轉換完成后刪除源文件// if (isDelSourceFile) {// deleteFile(sourceVideoPath);// } return true; } catch (Exception e) { e.printStackTrace(); return false; } }  /** * ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) * @param oldfilepath * @return */ private boolean processFLV(String oldfilepath) { if (!checkfile(sourceVideoPath)) { System.out.println(oldfilepath + " is not file"); return false; } List<String> commend = new java.util.ArrayList<>(); commend.add(ffmpegpath); commend.add("-i"); commend.add(oldfilepath); commend.add("-ab"); commend.add("64"); commend.add("-acodec"); commend.add("mp3"); commend.add("-ac"); commend.add("2"); commend.add("-ar"); commend.add("22050"); commend.add("-b"); commend.add("230"); commend.add("-r"); commend.add("24"); commend.add("-y"); commend.add(targetfolder + filerealname + ".flv"); try { ProcessBuilder builder = new ProcessBuilder(); String cmd = commend.toString(); builder.command(commend); Process p = builder.start(); doWaitFor(p); p.destroy(); deleteFile(oldfilepath); return true; } catch (Exception e) { e.printStackTrace(); return false; } }  public int doWaitFor(Process p) { InputStream in = null; InputStream err = null; int exitValue = -1; // returned to caller when p is finished try { System.out.println("comeing"); in = p.getInputStream(); err = p.getErrorStream(); boolean finished = false; // Set to true when p is finished  while (!finished) { try {  while (in.available() > 0) {  Character c = new Character((char) in.read());  System.out.print(c);  }  while (err.available() > 0) {  Character c = new Character((char) err.read());  System.out.print(c);  }   exitValue = p.exitValue();  finished = true;  } catch (IllegalThreadStateException e) {  Thread.currentThread().sleep(500); } } } catch (Exception e) { System.err.println("doWaitFor();: unexpected exception - " + e.getMessage()); } finally { try { if (in != null) {  in.close(); }  } catch (IOException e) { System.out.println(e.getMessage()); } if (err != null) { try {  err.close(); } catch (IOException e) {  System.out.println(e.getMessage()); } } } return exitValue; }

3)最后,編寫測試類:ConverVideoTest.java

public class ConverVideoTest { public void run() {  try {   // 轉換并截圖   String filePath = "C://Users//wangdy//Desktop//pics//05.尚硅谷_SVN_啟動服務器.wmv";   ConverVideoUtils cv = new ConverVideoUtils(filePath);   String targetExtension = ".mp4";   boolean isDelSourseFile = true;   boolean beginConver = cv.beginConver(targetExtension,isDelSourseFile);   System.out.println(beginConver);  } catch (Exception e) {   e.printStackTrace();  } }  public static void main(String args[]) {  ConverVideoTest c = new ConverVideoTest();  c.run(); }}

這樣就完成了整個視頻格式的轉換,在定義的目標視頻文件夾和截圖存放文件夾就可以看到轉換后的視頻和視頻第一幀的截圖了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩久久久久| 国产精品91久久久| 亚洲国内精品在线| 欧美高跟鞋交xxxxhd| 精品激情国产视频| 久久久视频免费观看| 中文字幕日韩高清| xvideos国产精品| 懂色av中文一区二区三区天美| 一区二区三区视频观看| 国产裸体写真av一区二区| 性欧美视频videos6一9| 国产精品久久久久av| 精品五月天久久| 国产精品麻豆va在线播放| 国模gogo一区二区大胆私拍| 国产自摸综合网| 欧美精品精品精品精品免费| 亚洲欧美日韩区| 欧美日韩另类在线| 亚洲自拍欧美色图| 91在线色戒在线| 92国产精品视频| 丝袜情趣国产精品| 国产91精品网站| 国产精品久久二区| 中文日韩电影网站| 久久天天躁夜夜躁狠狠躁2022| 97欧美精品一区二区三区| 亚洲激情小视频| 在线看日韩av| 国产精品综合久久久| 国产精品一区二区三区免费视频| 久久综合久久八八| 欧美中文字幕精品| 国产欧美日韩综合精品| 综合欧美国产视频二区| 久久免费视频观看| 5566日本婷婷色中文字幕97| 国内精品400部情侣激情| 中文字幕日韩精品在线| 91国偷自产一区二区三区的观看方式| 日韩av一区二区在线| 精品国产一区二区三区久久狼5月| 色先锋资源久久综合5566| 日韩一区二区精品视频| 欧美在线视频观看免费网站| 国产日韩欧美日韩| 日韩www在线| 久久成人18免费网站| 国产精品中文字幕在线观看| 在线色欧美三级视频| 欧美国产精品人人做人人爱| 欧美性资源免费| 国产一区二区三区日韩欧美| 亚洲精品suv精品一区二区| 国产成+人+综合+亚洲欧美丁香花| 国产精品视频99| 日韩禁在线播放| 久久久成人av| 久久国产精品影片| 国产精品老女人精品视频| 欧美激情久久久久| 亚洲电影在线看| 久久久久久国产精品三级玉女聊斋| www.亚洲男人天堂| 麻豆国产va免费精品高清在线| 久久久精品在线观看| 国产做受高潮69| 亚洲国内高清视频| 久久久久久久一区二区| 热99精品里视频精品| 国产精品视频成人| 色妞一区二区三区| 色综合久久中文字幕综合网小说| 亚洲一区二区免费在线| 成人精品久久一区二区三区| 国产精品入口福利| 国产精品27p| 国产主播精品在线| 国产精品久久久久久久久久小说| 日本一区二三区好的精华液| 69av视频在线播放| 91久久在线视频| 久久精品电影网| 欧美大片在线免费观看| 国产91对白在线播放| 欧美一级在线亚洲天堂| 欧洲精品毛片网站| 国产精品久久久久久久久借妻| 日韩激情av在线免费观看| 精品视频偷偷看在线观看| 日韩在线免费观看视频| 欧美性极品少妇精品网站| 国产精品自拍偷拍| 色哟哟网站入口亚洲精品| 亚洲女人被黑人巨大进入al| 亚洲综合第一页| 精品国产一区av| 国产成人免费av电影| 中文字幕亚洲欧美在线| 亚洲高清久久网| 久久综合国产精品台湾中文娱乐网| 国产成人精品免高潮费视频| 亚洲欧美在线播放| 亚洲精品一区二区久| 日韩中文字幕在线视频| 欧美极品欧美精品欧美视频| 人妖精品videosex性欧美| 久久成人精品一区二区三区| 亚洲成人999| 2019精品视频| 亚洲第一天堂无码专区| 亚洲男人天堂古典| 91高潮在线观看| 97在线观看免费高清| 国产日韩在线播放| 欧美亚洲另类制服自拍| 亚洲欧美日韩另类| 日本国产精品视频| 日本免费久久高清视频| 91中文在线视频| 亚洲字幕一区二区| 日韩电影免费观看中文字幕| 精品日本美女福利在线观看| 欧美—级a级欧美特级ar全黄| 91社区国产高清| 亚洲国产一区二区三区在线观看| 欧美日韩中文字幕在线视频| 久久激情视频久久| 精品露脸国产偷人在视频| 欧美黑人狂野猛交老妇| 亚洲成人av中文字幕| 国产亚洲精品久久久久久777| 欧美电影免费观看大全| 欧美区在线播放| 少妇高潮 亚洲精品| 日韩资源在线观看| 奇米成人av国产一区二区三区| 亚洲自拍偷拍色片视频| 国产精品久久久久久久久免费| 欧美劲爆第一页| 日韩欧美中文字幕在线观看| 精品成人av一区| 91在线免费看网站| 日韩电视剧免费观看网站| 亚洲精品成人久久| 亚洲网在线观看| 亚洲精品www久久久久久广东| 久久久噜噜噜久久久| 国产精品永久在线| 不卡av日日日| 亚洲国产97在线精品一区| 欧美成人精品三级在线观看| 在线精品国产欧美| 俺去了亚洲欧美日韩| 亚洲精品久久久久久久久久久久久| 69久久夜色精品国产69| 中文字幕亚洲二区| 九九热这里只有精品6| 欧美激情精品久久久久久大尺度| 欧美黄网免费在线观看| 欧美日韩精品在线播放| 亚洲女在线观看|