外部命令不能完全执行 - Java

时间:2012-03-26 12:12:21

标签: java ffmpeg runtime.exec

所以,我正在构建一个将.flv文件转换为其他格式的程序。 为此,我正在使用ffmpeg,它在通过命令行执行时完美地完成了它的工作。例如:

ffmpeg -i C:\test.flv -acodec libmp3lame -y C:\test.mp3

此示例的工作方式类似于魅力 - 执行命令时没有任何问题。

但是当我尝试从Java类中执行相同的命令时会出现问题。我在try-catch块中执行此操作:

System.out.println("Start");
Process p = Runtime.getRuntime().exec("cmd /c ffmpeg -i C:\test.flv -acodec libmp3lame -y C:\test.mp3");
System.out.println("End");

控制台打印“开始”。它开始转换,但没有完成 有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:5)

嗯,问题以非常意外的方式解决了。我只需要读取执行生成的输出。而且,瞧,文件已被转换。

InputStream in = p.getErrorStream();
int c;
while ((c = in.read()) != -1)
{
    System.out.print((char)c);
}
in.close();

答案 1 :(得分:3)

两个问题:

  1. cmd /c ffmpeg -i C:\test.flv -acodec libmp3lame -y C:\test.mp3 不是命令。 (您可能最终得到IOException,导致"End"被抑制。)

    cmd是您要执行的命令,其余字符串是参数。使用ProcessBuilderRuntime.exec(String[] cmdarray)

  2. 您需要等待该过程完成。呼叫

    p.waitFor();
    

    启动过程后。这是Process.waitFor文档的链接。

答案 2 :(得分:0)

您是否尝试过控制字符串,例如:

cmd "ffmpeg" -i "C:\test.flv" -acodec "libmp3lame" -y "C:\test.mp3"

cmd "ffmpeg -i C:\test.flv -acodec libmp3lame -y C:\test.mp3"

答案 3 :(得分:0)

首先,这不是DOS命令。它是一个控制台命令行,来自任何风格的Microsoft Windows。

您可以使用p.waitFor()来解决这个问题,或者您可以像Xuggler那样使用FFMPEG的包装Java API,它很容易使用,而且它有LGPL。