この人頭いいなと思ったエピソード

現在、windows vista に ffmpeg をインストールし、java(1.6)から以下のようにffmpeg.exeを呼び出しています。
--------------------------------------------------------------
public static void main(String[] args) {

ProcessBuilder builder = new ProcessBuilder("C:/Tools/3GP_Converter034/cores/debug.bat");
try {
Process process = builder.start();


InputStream is = process.getInputStream();//標準出力
printInputStream(is);
InputStream es = process.getErrorStream();//標準エラー
printInputStream(es);
}
catch (Exception e) {
throw new ConversionException(e);
}
}

public static void printInputStream(InputStream is) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
for (;;) {
String line = br.readLine();
if (line == null) break;
System.out.println(line);
}
}
--------------------------------------------------------------

debug.batの中身は以下です。
--------------------------------------------------------------
C:/Tools/3GP_Converter034/cores/ffmpeg.exe -y -i c:/work/a.mpg -f flv -vcodec flv -r 25 -b 900k -ar 44100 -ab 64k c:/work/out99.flv
--------------------------------------------------------------

debug.batを直接呼び出すと正常にout99.flvが出力されるのですが、java経由だとうまくできません。

printInputStreamメソッドから以下のsysytem out文が出力されたまま止まってしまいます。
C:\java>C:/Tools/3GP_Converter034/cores/ffmpeg.exe -y -i c:/work/a.mpg -f flv -vcodec flv -r 25 -b 900k -ar 44100 -ab 64k c:/work/out99.flv

まったく理由がわかりませn。

どなたかご教示ください;;

A 回答 (2件)

う~ん。


標準出力と標準エラーの出力をコメントアウトしてみて、
代わりに
process.waitFor();
int result = process.exitValue();
System.out.println("result:"+result);
としてみるとどうなりますか?
正常に実行できていれば、resultが0になると思うのですが…。

この回答への補足

ご回答ありがとうございます。
ご提示いただいた通りのコードを実行したところ、
process.waitFor()以降に処理が進まない状態となります。
やはりffmpegコマンドが実行されていないように思えます・・

補足日時:2009/07/14 22:56
    • good
    • 0

Windows VistaなのでUACが利いてるとか…。


ffmpegの実行に管理者権限が必要とかありませんか?

この回答への補足

ご回答ありがとうございます。
vista全体で、UACは無効に設定しています。

補足日時:2009/07/14 12:06
    • good
    • 1

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