ffmpeg windows和linux下轉換格式
阿新 • • 發佈:2018-11-10
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Date; import java.util.List; public class ConvertVideo { // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) /** * @param path 專案根目錄 * @param name 需要轉換的檔名 * @return */ public static String processVedio(String path, String name) { if (WcyUtil.isWindows()) { System.out.println("windows作業系統"); path=processVediowindows(path, name); } else { System.out.println("linux作業系統"); path=processVediolinux(path, name); } return path; } // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) public static String processVediowindows(String path, String name) { List<String> command = new ArrayList<String>(); command.add(path + "/ffmpeg/ffmpeg"); command.add("-i"); command.add(path + "/cache/" + name);// 待轉換檔案絕對路徑 name = name.substring(0, name.lastIndexOf(".")) + ".mp4"; path = path + "/backup/" + name; command.add(path); // 待輸出檔案絕對路徑 try { Date date = new Date(); Process videoProcess = new ProcessBuilder(command).redirectErrorStream(true).start(); new PrintStream(videoProcess.getErrorStream()).start(); new PrintStream(videoProcess.getInputStream()).start(); videoProcess.waitFor(); Date date1 = new Date(); System.out.println("轉換格式花費" + (date1.getTime() - date.getTime()) + "毫秒"); } catch (Exception e) { System.out.println("轉換檔案格式失敗"); } finally { return path; } } // ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) public static String processVediolinux(String path, String name) { List<String> commend = new ArrayList<String>(); commend.add("ffmpeg"); commend.add("-i"); commend.add(path + "/cache/" + name);// 待轉換檔案絕對路徑 commend.add("-strict"); commend.add("-2"); name = name.substring(0, name.lastIndexOf(".")) + ".mp4"; path = path + "/backup/" + name; commend.add(path); // 待輸出檔案絕對路徑 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("視訊轉換成功"); return path; } } class PrintStream extends Thread { java.io.InputStream __is = null; public PrintStream(java.io.InputStream is) { __is = is; } public void run() { try { while (this != null) { int _ch = __is.read(); if (_ch != -1) System.out.print((char) _ch); else break; } } catch (Exception e) { e.printStackTrace(); } } }