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();
}
}
}