//視頻上傳過程中自動轉換為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,不過在我的項目感覺圖片太大了,影響了整體的美觀 。你可以自己嘗試一下。