程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java調用命令實現視頻上傳過程中自動轉換為flv格式並截圖生成縮略圖

Java調用命令實現視頻上傳過程中自動轉換為flv格式並截圖生成縮略圖

編輯:關於JAVA

//視頻上傳過程中自動轉換為flv格式並截圖生成縮略圖(Java調用命令實現)
import java.util.ArrayList;
import java.util.List;

public class VideoProcess {

System.out.println(oldfilepath+"->"+newfilename+"- >"+newimg);
List<String> commendF = new ArrayList<String> ();
List<String> commendI=new java.util.ArrayList<String> ();

commendF.add("D://tools//mencoder//mencoder");
commendF.add (oldfilepath);
commendF.add("-o");
commendF.add (newfilename);
commendF.add("-of");
commendF.add ("lavf");
commendF.add("-oac");
commendF.add ("mp3lame");
commendF.add("-lameopts");
commendF.add ("abr:br=32:vol=1");
commendF.add("-srate");
commendF.add ("22050");
commendF.add("-ovc");
commendF.add ("lavc");
commendF.add("-lavcopts");
commendF.add ("vcodec=flv:vbitrate=480:mbd=2:v4mv:turbo:vb_strategy=1:last_pred=2:trell");
c ommendF.add("-vf");
commendF.add ("scale=400:226");

commendI.add ("d://tools//ffmpeg");
commendI.add("-i");
commendI.add (oldfilepath);
commendI.add("-y");
commendI.add("- f");
commendI.add("image2");
commendI.add("- ss");
commendI.add("8");
commendI.add("-t");
commendI.add ("0.001");
commendI.add("-s");
commendI.add ("100x100");
commendI.add(newimg);

try {

ProcessClass.exec (commendF);
ProcessClass.exec(commendI);

return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

public static void main(String[] args){
String oldfilepath = "D://video//a1.avi";
String newfilename = "D://video//a1.flv";
String newimg = "D://video//a1.jpg";

processTransToImg2 (oldfilepath,newfilename,newimg);
System.out.println("over");
}
}
ProcessClass.java
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public class ProcessClass{
public List<String> commendList = new ArrayList<String>();
public ProcessClass(List<String> commendList){
this.commendList = commendList;
}
//同步使只能有一個進程執行該方法( 實現格式轉換進程完成後執行截圖進程操作)
public static synchronized Process exec (List<String> commendlist){
StringBuffer strBuf = new StringBuffer();
for (Iterator iter =commendlist.iterator();iter.hasNext(); ){
String Strtemp = (String) iter.next();
strBuf.append(Strtemp);
strBuf.append(" ");
}

try {
return Runtime.getRuntime().exec(strBuf.toString());
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}

這並不是完善的程序,還存在一些問題:

1、由於對於ffmpeg中的命令參數我並不是很了解,對於命令中的參數值並不是最優的選擇,我在運行 過程中出現轉換後的文件大小還大於原文件。

2、如果當你轉換後沒有看到生成圖片,則你可以嘗試修改

commendI.add("100x100"); 這個裡面的值。

當我在程序中設置為100x75就不會生成圖片,而當設置為100x100就可以看到圖片生成出來了。

網上看到有一個朋友給的實例中設置為320X240,不過在我的項目感覺圖片太大了,影響了整體的美觀 。你可以自己嘗試一下。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved