FFMPEGを使用してオーディオ ファイルを変換しています。コマンド ラインを呼び出し、次にJava からFFMPEGを呼び出します。Runtime と Process Runtime.exec()を使用してこれを行います。プロセスには、InputStream と ErrorStreamがあります。何らかの理由で、FFMPEG コマンドが正常に動作していても、エラー ストリームから出力され、失敗した印象を与えます。なぜこれが起こっているのか誰にも分かりますか?明らかにそれは問題なく動作するので大きな問題ではありませんが、何らかの理由で実際にエラーが発生したり、プロジェクトに不慣れな人がこれがどのように機能するかを認識していない場合、混乱する可能性があります. 何か案は?関連するコードは次のとおりです。
Runtime rt = Runtime.getRuntime();
System.out.println("Execing " + cmd);
Process proc = rt.exec(cmd);
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");
// any output?
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT");
// kick them off
errorGobbler.start();
outputGobbler.start();
// any error???
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
そして StreamGobbler クラス:
class StreamGobbler extends Thread {
InputStream is;
String type;
StreamGobbler(InputStream is, String type) {
this.is = is;
this.type = type;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null)
System.out.println(type + ">" + line);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}