Java处理器构建器ffmpeg管道



我尝试运行ffmpeg out java。下面是我的代码:

String[] temp = {"ffmpeg\ffmpeg.exe","-i","input_track.ac3","-threads","0","-af","volume=volume="0.0"dB","-acodec","pcm_s32le","-ac","6","-ar","48000","-f","wav","-","|","ffmpeg\fdkaac","--ignorelength","-m","1","-o","ouput_track.aac","-"};
ProcessBuilder pb = new ProcessBuilder(temp);
Process p = pb.start();
int ev = 0;
if (p.waitFor() != 0)
{
   ev = p.exitValue();
}

我尝试命令在Windows cmd,这里有一个问题与"|"在ffmpeg命令行。

也许有人说我可以?

这个问题类似于如何使管道与Runtime.exec()一起工作?...

问题本质上是相同的:exec方法不理解shell语法,如管道,输入或输出方向等。解决方案本质上也是一样的:执行适当的shell并让它来处理shell语法。

在这种情况下,尝试这样做:

String[] temp = new String[] {
    "cmd", "/c",
    "ffmpeg\ffmpeg.exe -i input_track.ac3 -threads 0 " + 
    "-af volume=volume="0.0"dB -acodec pcm_s32le -ac 6 " +
    "-ar 48000 -f wav - | " +
    "ffmpeg\fdkaac --ignorelength -m 1 -o ouput_track.aac -"
};

注意实际的命令是一个字符串。(0.0周围的引号看起来有点奇怪,但这就是你的问题。)

|是一个shell管道字符,在Java中,您必须在shall中运行该命令(bash -c "整个命令行|到这里"),或者您必须运行两个进程(一个在|之前,一个在之后),其中第一个的标准输出写入第二个的标准输入。为此,通常使用redirectOutput(Redirect.PIPE)和redirectInput(Redirect.PIPE)。

相关内容

  • 没有找到相关文章

最新更新