private void compressAndUploadToOSS(Path filePath) throws IOException { ProcessBuilder processBuilder = new ProcessBuilder( "D:\develop\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe", "-i", filePath.toString(), "-vf", "scale=640:-1", "-c:a", "copy", "compressed.mp4" ); // 执行FFmpeg命令 Process process = processBuilder.start(); try { int exitCode = process.waitFor(); } catch (InterruptedException e) { e.printStackTrace(); } } }卡住一直不动,怎样使用process.getErrorStream() 来获取FFmpeg命令执行过程中的错误输出,以便更好地了解问题所在
时间: 2024-04-22 10:28:03 浏览: 109
如果你想使用 `process.getErrorStream()` 来获取FFmpeg命令执行过程中的错误输出,你可以在代码中添加以下部分:
```java
private void compressAndUploadToOSS(Path filePath) throws IOException {
ProcessBuilder processBuilder = new ProcessBuilder(
"D:\\develop\\ffmpeg-master-latest-win64-gpl\\bin\\ffmpeg.exe",
"-i", filePath.toString(),
"-vf", "scale=640:-1",
"-c:a", "copy",
"compressed.mp4"
);
// 执行FFmpeg命令
Process process = processBuilder.start();
// 获取错误输出流
InputStream errorStream = process.getErrorStream();
BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));
String errorLine;
while ((errorLine = errorReader.readLine()) != null) {
System.out.println(errorLine);
}
try {
int exitCode = process.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
```
在添加的代码部分中,我们首先获取 `process` 的错误输出流,并创建一个 `BufferedReader` 来读取错误输出。然后,我们逐行读取错误输出并将其打印到控制台。
这样可以让你查看FFmpeg命令执行过程中的错误信息,帮助你更好地了解问题所在。如果命令执行过程中有任何错误输出,它将会被打印出来。
请注意,在使用 `process.getErrorStream()` 时,确保在调用 `process.waitFor()` 之前读取完整个错误输出流。否则,可能会导致进程卡住不动的问题。
通过这个方法,你可以获取到FFmpeg命令执行过程中的错误输出,并以此来进一步了解问题所在。如果问题仍然存在,请提供更多的错误信息和上下文,以便我们能够更好地帮助你解决问题。
阅读全文