摘要
作者:古刹飛鷹
BLOG:www.v246.com
QQ:28095553
Email:aquaqu(圈.a)gmail.com
本文屬古刹飛鷹原創,轉載請註明出處!
以下是源碼:
【全文】
作者:古刹飛鷹
BLOG:www.v246.com
QQ:28095553
Email:aquaqu(圈.a)gmail.com
本文屬古刹飛鷹原創,轉載請註明出處!
本方法以經經過實戰驗證,正在項目中使用,稍後您可以查看:http://www.0431net.com,網站的視頻模快的核心功能就是用這個方法實現的:)
以下是源碼:
Cnvert 類
package com.v246.convertFLV;
import java.util.ArrayList;
import java.util.List;
import com.v246.utils.Aqu;
//作者:古刹飛鷹 blog:www.v246.com懶漢模式
public class Convert {
private static Convert instance = null;
//作者:古刹飛鷹 blog:www.v246.com flv工具的絕對位址
private String aquInterceptPicToolsPath = "c:\\FLVTools\\ffmpeg.exe";
//作者:古刹飛鷹 blog:www.v246.com flv修複工具的絕對位址
private String fixFLVToolsPath = "c:\\FLVTools\\flvmdi.exe";
//作者:古刹飛鷹 blog:www.v246.com flv轉換工具的絕對位址
private String aquCoverFLVToolsPath = "c:\\FLVTools\\mencoder\\mencoder.exe";
private Convert() {
//作者:古刹飛鷹 blog:www.v246.cominit();
}
public static Convert getInstance() {
if (instance == null) {
instance = new Convert();
}
return instance;
}
public void reset(){
//作者:古刹飛鷹 blog:www.v246.cominit();
}
private void init() {
/*aquInterceptPicToolsPath = Aqu.getXMLValue("convertFLV.xml",
"//作者:古刹飛鷹 blog:www.v246.com古刹飛鷹/FLV轉換工具全路徑")[0];
fixFLVToolsPath = Aqu
.getXMLValue("convertFLV.xml", "//作者:古刹飛鷹 blog:www.v246.com古刹飛鷹/FLV工具全路徑")[0];
aquCoverFLVToolsPath = Aqu.getXMLValue("convertFLV.xml",
"//作者:古刹飛鷹 blog:www.v246.com古刹飛鷹/FLV修複工具全路徑")[0];
aquInterceptPicToolsPath = aquInterceptPicToolsPath.replace("/", "\\");
fixFLVToolsPath = fixFLVToolsPath.replace("/", "\\");
aquCoverFLVToolsPath = aquCoverFLVToolsPath.replace("/", "\\");
System.out.println(aquInterceptPicToolsPath);
System.out.println(fixFLVToolsPath);
System.out.println(aquCoverFLVToolsPath);*/
}
public synchronized boolean convert(String aquInputPath, String outPath) {
boolean re = false;
//作者:古刹飛鷹 blog:www.v246.com 通一路徑定位器
aquInputPath = aquInputPath.replace("/", "\\");
//作者:古刹飛鷹 blog:www.v246.com 通一路徑定位器
outPath = outPath.replace("/", "\\");
//作者:古刹飛鷹 blog:www.v246.com 分析不包含檔案名稱的輸出路徑
String interceptPicSavePath = outPath.substring(0, outPath
.lastIndexOf("\\") + 1);
//作者:古刹飛鷹 blog:www.v246.com 分析輸出的檔案名稱
String outFileName = outPath.substring(outPath.lastIndexOf("\\") + 1,
outPath.length());
//作者:古刹飛鷹 blog:www.v246.com 繼續分析得出不包含副檔名的檔案名稱
String outFileNameNoExt = outFileName.substring(0, outFileName
.lastIndexOf("."));
//作者:古刹飛鷹 blog:www.v246.com 工作目錄,隨便設定
//作者:古刹飛鷹 blog:www.v246.com String workdirectory = "c:\\windows\\temp";
//作者:古刹飛鷹 blog:www.v246.com 修複命令
List<String> parameterForFix = new ArrayList<String>(100);
//作者:古刹飛鷹 blog:www.v246.com 轉換命令
List<String> aquParameterForConvert = new ArrayList<String>(100);
//作者:古刹飛鷹 blog:www.v246.com 命令
List<String> aquParameterForIntercept = new ArrayList<String>(100);
//作者:古刹飛鷹 blog:www.v246.com 構建轉換命令
aquParameterForConvert.add(aquCoverFLVToolsPath);
aquParameterForConvert.add("-vf");
aquParameterForConvert.add("scale=320:240");
aquParameterForConvert.add("-ffourcc");
aquParameterForConvert.add("FLV1");
aquParameterForConvert.add("-of");
aquParameterForConvert.add("lavf");
aquParameterForConvert.add("-lavfopts");
aquParameterForConvert
.add("i_certify_that_my_video_stream_does_not_use_b_frames");
aquParameterForConvert.add("-ovc");
aquParameterForConvert.add("lavc");
aquParameterForConvert.add("-lavcopts");
aquParameterForConvert.add("vcodec=flv:vbitrate=200");
aquParameterForConvert.add("-srate");
aquParameterForConvert.add("22050");
aquParameterForConvert.add("-oac");
aquParameterForConvert.add("lavc");
aquParameterForConvert.add("-lavcopts");
aquParameterForConvert.add("acodec=mp3:abitrate=56");
aquParameterForConvert.add(aquInputPath);
aquParameterForConvert.add("-o");
aquParameterForConvert.add(outPath);
//作者:古刹飛鷹 blog:www.v246.com 構建修複命令
parameterForFix.add(fixFLVToolsPath);
parameterForFix.add(outPath);
//作者:古刹飛鷹 blog:www.v246.com 構建命令
aquParameterForIntercept.add(aquInterceptPicToolsPath);
aquParameterForIntercept.add("-i");
aquParameterForIntercept.add(outPath);
aquParameterForIntercept.add("-y");
aquParameterForIntercept.add("-f");
aquParameterForIntercept.add("image2");
aquParameterForIntercept.add("-ss");
aquParameterForIntercept.add("8");
aquParameterForIntercept.add("-t");
aquParameterForIntercept.add("0.001");
aquParameterForIntercept.add("-s");
aquParameterForIntercept.add("320x240");
aquParameterForIntercept.add(interceptPicSavePath + outFileNameNoExt
+ ".jpg");
//作者:古刹飛鷹 blog:www.v246.com轉換
String tmp1 = Aqu.exec(aquParameterForConvert);
//作者:古刹飛鷹 blog:www.v246.com
String tmp2 = Aqu.exec(aquParameterForIntercept);
return re;
}
public static void main(String[] args) {
getInstance().convert("h:\\QQ28095553\\古刹飛鷹.wmv", "h:\\aquaqu(quana)gmail.com\\古刹飛鷹.flv");
}
}
ConvertThread 類
package com.v246.convertFLV;
public class ConvertThread extends Thread{
private String fromPath = null;
private String toPath = null;
@Override
public void run(){
Convert.getInstance().convert(fromPath, toPath);
}
public void setFromPath(String fromPath) {
this.fromPath = fromPath;
}
public void setToPath(String toPath) {
this.toPath = toPath;
}
}
ConvertThreadProxy類:
package com.v246.convertFLV;
public class ConvertThreadProxy {
public static void convert(String fromPath, String toPath) {
ConvertThread ct = new ConvertThread();
ct.setFromPath(fromPath);
ct.setToPath(toPath);
ct.start();
}
}
使用的時候只要通過ConvertThreadProxy 類的靜態方法將源視頻絕對位址(包括檔案名稱+括展名)和要產生的FLV檔案的絕對位址(包括檔案名稱+括展名)以字串的方式傳進去即可!因為用的是多線程,所以轉換過程不會佔用當前線程!
核心轉換類是線程同步的,所以您不用擔心並法問題,因為一次只能轉換一個檔案!
注:安裝和使用ffmpeg轉換視頻為flv檔案(windows和linux)
用java程式調用ffmpeg執行視頻檔案格式轉換flv
來源:http://www.v246.com/html/182.html