Linux環境下java呼叫ffmpeg命令進行視訊轉碼
阿新 • • 發佈:2019-02-15
1.這是在Linux系統下的程式碼,我執行後可以轉換成功: import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.io.*; import java.lang.*; import java.util.*; import java.text.*; import java.net.*; public class Test { public static void main(String[] args) { List<String> commend = new ArrayList<String>(); commend.add("/usr/local/ffmpeg2/bin/./ffmpeg"); commend.add("-i"); commend.add("/opt/spzh/yysp.avi"); commend.add("-ab"); commend.add("128"); commend.add("-acodec"); commend.add("libfaac"); commend.add("-ac"); commend.add("1"); commend.add("-ar"); commend.add("22050"); commend.add("-r"); commend.add("24"); commend.add("-y"); commend.add("/opt/spzh/out/yysp18.flv"); StringBuffer test=new StringBuffer(); for(int i=0;i<commend.size();i++) test.append(commend.get(i)+" "); System.out.println(test); try { Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(test.toString()); InputStream stderr = proc.getErrorStream(); InputStreamReader isr = new InputStreamReader(stderr); BufferedReader br = new BufferedReader(isr); String line = null; while ( (line = br.readLine()) != null); } catch (IOException e) { e.printStackTrace(); } System.out.println("視訊轉換成功"); } }
2.這是在Windows下面的程式碼,在網上找了很多資料說這種在Linux中也能用,但是我自己在Linux系統下執行改程式碼時發現,該程式碼視訊轉換的時候只能轉換一部分,舉個例子:原視訊有7M,直接在Linux下執行裝換命令是正常的,而用該java程式碼執行該命令時視訊只能轉換1M;而且轉換成MP4的時候,視訊無法播放。
import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.io.*; import java.lang.*; import java.util.*; import java.text.*; import java.net.*; public class Test1 { public static void main(String[] args) { List<String> commend = new ArrayList<String>(); commend.add("/usr/local/ffmpeg2/bin/./ffmpeg"); commend.add("-i"); commend.add("/opt/spzh/yysp.avi"); commend.add("-ab"); commend.add("128"); commend.add("-acodec"); commend.add("libfaac"); commend.add("-ac"); commend.add("1"); commend.add("-ar"); commend.add("22050"); commend.add("-r"); commend.add("24"); commend.add("-y"); commend.add("/opt/spzh/out/yysp22.flv"); StringBuffer test=new StringBuffer(); for(int i=0;i<commend.size();i++) test.append(commend.get(i)+" "); System.out.println(test); ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); try { builder.redirectErrorStream(true); builder.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("視訊轉換成功"); } }
x
下面是轉換為flv格式和mp4格式的Linux命令:
(1)轉flv
./ffmpeg -i /opt/spzh/yysp.avi -ab 128 -acodec libfaac -ac 1 -ar 22050 -r 24 -y /opt/spzh/out/yysp9.flv
(2)轉mp4
./ffmpeg -i /opt/spzh/yysp.avi -f mp4 -acodec libfaac -vcodec libxvid -qscale 7 -dts_delta_threshold 1 -y /opt/spzh/out/yysp8.mp4