String ffmpeg = "D: & cd D:\JavaOption\ffmpeg-4.3.1-full_build\bin & ffmpeg -i d:\11.mkv -map 0:s:0 sub11.srt";
List<String> cmdList = new ArrayList<>();
cmdList.add("cmd");
cmdList.add("/c");
cmdList.add(ffmpeg );
ProcessBuilder pb = new ProcessBuilder(cmdList);
pb.redirectErrorStream(true);
Process process = pb.start();
readProcessOutput(process.getInputStream(), System.out);
int state = process.exitValue();
System.out.println(state);
System.out.println("ok");
注意
1、String ffmpeg 有第三条命令(每条命令用 & 链接)
不能分开 cmdList.add()三次
即 不能采用下面这种调用方法
cmdList.add("d:");
cmdList.add("cd D:\JavaOption\ffmpeg-4.3.1-full_build\bin");
cmdList.add("ffmpeg -i d:\11.mkv -map 0:s:0 sub11.srt");
如果分开add 会导致无法正确执行。
2、输出返回结果乱码解决方案
InputStreamReader 第二个参数设置为gbk
private static void readProcessOutput(InputStream inputStream, PrintStream out) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("GBK")));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println("-end");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出结果如图