Ⅰ 如何將ffmpeg在windows編譯和使用
如下:
1. 配置編譯環境
2. 下載FFMPEG的代碼
3. 編譯,獲取FFMPEG庫(頭文件,lib,和DLL)
4. 在VC下配置,測試
1. 配置編譯環境
1)安裝MSys
下載文件:
bash-3.1-MSYS-1.0.11-snapshot.tar.bz2
msysCORE-1.0.11-20080826.tar.gz
解壓msysCORE-1.0.11-20080826.tar.gz,比如解壓到X:\msys(以下內容都使用該路徑描述,X為你安裝的盤符)。
解壓bash-3.1-MSYS-1.0.11-snapshot.tar.bz2,產生一個名為bash-3.1的目錄,在該目錄下有一個子目錄名為bin,其他的目錄不需要關心。復制bin目錄中的所有文件到D:\msys\bin,提示是否要覆蓋sh.exe的時候,選擇是。
到「D:\msys\postinstall」目錄下執行pi.bat,在出現的提示中輸入n回車後(這個不搞錯了),按任意鍵退出即可。
2)安裝MinGW
下載文件:
binutils-2.20-1-mingw32-bin.tar.gz
(binutils-2.19.1-mingw32-bin.tar.gz)
gcc-core-3.4.5-20060117-3.tar.gz
gcc-g++-3.4.5-20060117-3.tar.gz
w32api-3.13-mingw32-dev.tar.gz
mingwrt-3.16-mingw32-dev.tar.gz
(mingwrt-3.15.2-mingw32-dev.tar.gz)
mingwrt-3.16-mingw32-dll.tar.gz
(mingwrt-3.15.2-mingw32-dll.tar.gz)
把它們全部解壓到X:\msys\mingw。
3)修改「msys.bat」
用文本編輯器打開D:\msys\msys.bat,由於打算用MSVC++編譯程序,所以需要有.lib文件才能鏈接到FFmpeg的庫,這些.lib文件可以使用微軟的工具鏈中lib命令產生。為此,機器上必須已經安裝了微軟的Visual Studio或是Visual C++。把下面一行加到msys.bat的最前面,把路徑替換成機器上vcvars32.bat實際存在的路徑,比如我的在「D:\program files\Microsoft Visual Studio 8\VC\bin」,於是就添加:
call "D:\program files\Microsoft Visual Studio 8\VC\bin"
4)系統整合
復制D:\msys\etc\fstab.sample為X:\msys\etc\fstab,用文本編輯器打開D:\msys\etc\fstab編輯。(需要使用一個支持Unix換行風格的編輯器,比如Notepad++),把下面這行:
D:/mingw /mingw
改為:
D:/msys/mingw /mingw
注意:改的這個目錄為mingw你所安裝的目錄,所以按本文來講是這個目錄。如果你安裝不目錄不同,就要改成你所安裝的目錄。
完成以上步驟,MSys+MinGW系統就配置完成了。
2. 下載FFMPEG的代碼
下載代碼的辦法由兩個,一個就是用svn 下載下來。我覺得哪怕你知道svn是啥,也不用這個方法,因為太慢了。一個文件一個文件下,最關鍵SVN對應的地址是國外,都不知道什麼才能全部下完。另外一個直接下一個代碼的壓縮包。
Ⅱ 請教大神,java調用ffmpeg,將兩段.wav音頻,拼接成一段.wav音頻,怎麼做
ffmpeg是c實現的,java想調它的api,起碼要寫一層jni出來,直接在jni層調用ffmpeg的api,然拋到java層去invoke.
當然還有一種,直接用命令實現,首先你需要編譯出可以在你當前環境上運行的ffmpeg,然後配置好拼接音頻的參數,使用Runtime的exec來執行這個命令,這種方法雖然簡單,但是一旦換個執行環境可能就沒有辦法使用你本機編譯的ffmpeg了,所以不推薦。
Ⅲ java使用ffmpeg進行視頻截圖,不成功,程序也沒報錯!
我用的是基於C++的ffmpeg開發,ffmpeg原本是針對linux下的GCC編譯器,當然通過MinGW也可以在win下進行編譯,但是需要安裝額外的編譯環境,你可以上chinavideo上去看看,那上面說的很清楚,的你所說的問題也不是很難,多看看開發文檔就可以解決了。
Ⅳ 用JAVA調用ffmpeg實現將各種視頻格式轉為flv時,怎樣做出簡單操作的界面
源代碼肯定不會貼給你的,思路可以說下!
首先,你在後台把各格式的相互轉換函數寫好比如,rm2flv,wav2flv,自己去掉人家的借口,找下demo代碼。
然後,做一個表單網頁,能上傳源文件到伺服器,點擊上傳提交任務
最後,上傳完畢,判斷文件格式(後綴),然後調用對應的函數進行轉換,轉換完畢後,可以給出轉換信息,如文件大小,轉換時間,轉換後文件url地址等
完畢!
Ⅳ 急急急!!!java 用ffmpeg將上傳的視頻轉成 .mp4 .ogg .webm 3種格式的視頻,沒思路,麻煩大神給點思路
import java.io.File;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
public class ConvertVideo {
private final static String PATH = "c:\\ffmpeg\\input\\c.mp4";
public static void main(String[] args) {
if (!checkfile(PATH)) {
System.out.println(PATH + " is not file");
return;
}
if (process()) {
System.out.println("ok");
}
}
private static boolean process() {
int type = checkContentType();
boolean status = false;
if (type == 0) {
System.out.println("直接將文件轉為flv文件");
status = processFLV(PATH);// 直接將文件轉為flv文件
} else if (type == 1) {
String avifilepath = processAVI(type);
if (avifilepath == null)
return false;// avi文件沒有得到
status = processFLV(avifilepath);// 將avi轉為flv
}
return status;
}
private static int checkContentType() {
String type = PATH.substring(PATH.lastIndexOf(".") + 1, PATH.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;
}
private static boolean checkfile(String path) {
File file = new File(path);
if (!file.isFile()) {
return false;
}
return true;
}
// 對ffmpeg無法解析的文件格式(wmv9,rm,rmvb等), 可以先用別的工具(mencoder)轉換為avi(ffmpeg能解析的)格式.
private static String processAVI(int type) {
List<String> commend = new ArrayList<String>();
commend.add("c:\\ffmpeg\\mencoder");
commend.add(PATH);
commend.add("-oac");
commend.add("lavc");
commend.add("-lavcopts");
commend.add("acodec=mp3:abitrate=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("c:\\ffmpeg\\output\\a.avi");
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
builder.start();
return "c:\\ffmpeg\\output\\a.avi";
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
// ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
private static boolean processFLV(String oldfilepath) {
if (!checkfile(PATH)) {
System.out.println(oldfilepath + " is not file");
return false;
}
// 文件命名
Calendar c = Calendar.getInstance();
String savename = String.valueOf(c.getTimeInMillis())+ Math.round(Math.random() * 100000);
List<String> commend = new ArrayList<String>();
commend.add("c:\\ffmpeg\\ffmpeg");
commend.add("-i");
commend.add(oldfilepath);
commend.add("-ab");
commend.add("56");
commend.add("-ar");
commend.add("22050");
commend.add("-qscale");
commend.add("8");
commend.add("-r");
commend.add("15");
commend.add("-s");
commend.add("600x500");
commend.add("c:\\ffmpeg\\output\\a.flv");
try {
Runtime runtime = Runtime.getRuntime();
Process proce = null;
String cmd = "";
String cut = " c:\\ffmpeg\\ffmpeg.exe -i "
+ oldfilepath
+ " -y -f image2 -ss 8 -t 0.001 -s 600x500 c:\\ffmpeg\\output\\"
+ "a.jpg";
String cutCmd = cmd + cut;
proce = runtime.exec(cutCmd);
ProcessBuilder builder = new ProcessBuilder(commend);
builder.command(commend);
builder.start();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}