Skip to content
标签
工具
字数
208 字
阅读时间
1 分钟

一、Process Builder

在java中可以使用Runtime类和Process Builder类两种方式来执行外部程序

以ffmpeg使用举例

ffmpeg是一个可行的视频处理程序,可以通过Java调用ffmpeg.exe完成视频处理。

java
ProcessBuilder processBuilder = new ProcessBuilder();
//定义命令内容
List<String> command = new ArrayList<>();
command.add("D:\\Program Files\\ffmpeg‐20180227‐fa0c9d6‐win64‐static\\bin\\ffmpeg.exe");
command.add("‐i");
command.add("E:\\ffmpeg_test\\1.avi");
command.add("‐y");//覆盖输出文件
command.add("‐c:v");
command.add("libx264");
command.add("‐s");
command.add("1280x720");
command.add("‐pix_fmt");
command.add("yuv420p");
command.add("‐b:a");
command.add("63k");
command.add("‐b:v");
command.add("753k");
command.add("‐r");
command.add("18");
command.add("E:\\ffmpeg_test\\1.mp4");
processBuilder.command(command);
//将标准输入流和错误输入流合并,通过标准输入流读取信息
processBuilder.redirectErrorStream(true);
try {
	//启动进程
	Process start = processBuilder.start();
	//获取输入流
	InputStream inputStream = start.getInputStream();
	//转成字符输入流
	InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"gbk");
	int len =1;
	char[] c = new char[1024];
	StringBuffer outputString = new StringBuffer();
	//读取进程输入流中的内容
	while ((len= inputStreamReader.read(c))!=1) {
		String s = new String(c,0,len);
		outputString.append(s);
		System.out.print(s);
	}
	inputStream.close();
} catch (IOException e) {
	e.printStackTrace();
}