JAVA 處理視頻文件,需要用到 ffmpeg 這個工具。不需要依賴jar包。無論是在windows服務器還是linux服務器,想要使用 ffmpeg 都需要先安裝。
附上Linux下 *.tar.gz/*.tgz、*.bz2形式的源代碼軟件包 安裝方法:
說明:建議解壓後先閱讀說明文件,可以瞭解安裝有哪些需求,有必要時還需改動編譯配置。有些軟件包的源代碼在編譯安裝後可以用make install命令來進行卸載,如果不提供此功能,則軟件的卸載必須手動刪除。由於軟件可能將文件分散地安裝在系統的多個目錄中,往往很難把它刪除幹 淨,那你應該在編譯前進行配置,指定軟件將要安裝到目標路徑:./configure --prefix=目錄名,這樣可以使用“rm -rf 軟件目錄名”命令來進行乾淨徹底的卸載。與其它安裝方式相比,需要用戶自己編譯安裝是最難的,它適合於使用Linux已有一定經驗的人,一般不推薦初學
者使用。
安裝:tar zxvf *.tar.gz 或 tar yxvf *.bz2 先解壓
然後進入解壓後的目錄:
./configure 配置
make 編譯
make install 安裝
卸載:make uninstall 或 手動刪除
安裝的時候如果沒有指明安裝路徑,一般都會安裝在 /user/local下面。安裝完成之後,可以在Linux下輸入 ffmpeg 查看是否安裝成功。
安裝成功之後,就可以在代碼裏引用了:
視頻格式轉換:
/**
* 視頻轉碼
* @param ffmpegPath 轉碼工具的存放路徑
* @param upFilePath 用於指定要轉換格式的文件,要截圖的視頻源文件
* @param codcFilePath 格式轉換後的的文件保存路徑
* @return
* @throws Exception
*/
private boolean executeCodecs(String ffmpegPath, String upFilePath, String codcFilePath) throws Exception {
// 創建一個List集合來保存轉換視頻文件爲flv格式的命令
List<String> convert = new ArrayList<String>();
convert.add(ffmpegPath); // 添加轉換工具路徑
convert.add("-i"); // 添加參數"-i",該參數指定要轉換的文件
convert.add(upFilePath); // 添加要轉換格式的視頻文件的路徑
convert.add("-qscale"); //指定轉換的質量
convert.add("6");
convert.add("-ab"); //設置音頻碼率
convert.add("64");
convert.add("-ac"); //設置聲道數
convert.add("2");
convert.add("-ar"); //設置聲音的採樣頻率
convert.add("22050");
convert.add("-r"); //設置幀頻
convert.add("24");
convert.add("-y"); // 添加參數"-y",該參數指定將覆蓋已存在的文件
convert.add(codcFilePath);
boolean mark = true;
ProcessBuilder builder = new ProcessBuilder();
try {
builder.command(convert);
builder.redirectErrorStream(true);
builder.start();
} catch (Exception e) {
mark = false;
e.printStackTrace();
}
return mark;
}
視頻截圖:
/**
*
* @param ffmpegPath 轉碼工具的存放路徑
* @param upFilePath 要截圖的視頻源文件
* @param mediaPicPath 添加截取的圖片的保存路徑
* @param width 截圖的寬
* @param height 截圖的高
* @return
*/
private boolean screenImage(String ffmpegPath, String upFilePath, String mediaPicPath, String width, String height) {
// 創建一個List集合來保存從視頻中截取圖片的命令
List<String> cutpic = new ArrayList<String>();
cutpic.add(ffmpegPath);
cutpic.add("-i");
cutpic.add(upFilePath); // 要截圖的視頻源文件
cutpic.add("-y");
cutpic.add("-f");
cutpic.add("image2");
cutpic.add("-ss"); // 添加參數"-ss",該參數指定截取的起始時間
cutpic.add("1"); // 添加起始時間爲第17秒
cutpic.add("-t"); // 添加參數"-t",該參數指定持續時間
cutpic.add("0.001"); // 添加持續時間爲1毫秒
cutpic.add("-s"); // 添加參數"-s",該參數指定截取的圖片大小
cutpic.add(width + "*" + height); // 添加截取的圖片大小爲350*240
cutpic.add(mediaPicPath); // 添加截取的圖片的保存路徑
ProcessBuilder builder = new ProcessBuilder();
try {
builder.command(cutpic);
builder.redirectErrorStream(true);
builder.start();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}