プロが教える店舗&オフィスのセキュリティ対策術

ffmpegを呼び出してmp3変換を行いたいのですがずっと動いたまま終了せずに困っています。

import java.io.IOException;

public class Cratemp3 {

public static void main(String[] args)
throws IOException, InterruptedException
{
ProcessBuilder processBuilder = new ProcessBuilder(
"./ffmpeg",
"-y" ,
"-i" ,
"sample.flv",
"-acodec" ,
"copy" ,
"sample.mp3"
);
Process process = processBuilder.start();
process.waitFor();
}

}

process.waitFor()を抜くと上手く動きますが
process.waitFor()をいれると上手く動きません。

ffmpegで変換したmp3ファイルを使用して処理を続けたいのですがどうしたらいいのでしょうか?

よろしくお願いします。

A 回答 (1件)

サブプロセス(ffmpeg)が、メインプロセス(Java)の入力Streamに出力を行おうとしているが、


Process#waitForによりブロックされ、出口を失っている状態と思われます。
下記の様な処理をwaitForの前に追記してみて下さい。

----
StringBuilder sb = new StringBuilder();
byte[] bin = new byte[1024];
InputStream is =process.getErrorStream(); // ffmpegのエラー出力
while (is.read(bin) >0) {
sb.append(new String(bin));
}
System.out.println(new String(sb));

// Process#getInputStreamも同様に。
// closeを忘れずに。
----

参考:
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!