Java 无法ProcessBuilder执行ffmpeg-i shortWav.wav-af消音器move=1:0:-50dB shortWavCued.mp3的命令

Java 无法ProcessBuilder执行ffmpeg-i shortWav.wav-af消音器move=1:0:-50dB shortWavCued.mp3的命令,java,bash,Java,Bash,Hi在尝试使用via java ProcessBuilder命令构造路径运行bash命令时遇到问题 由于文件未找到错误,我决定不使用Runtime.getRuntime().exec(命令)。发现这是因为它天真地试图解析命令 我要执行的bash命令是 ffmpeg -i shortWav.wav -af silenceremove=1:0:-50dB shortWavCued.mp3 在传递命令时,我尝试了一种变体 ProcessBuilder pb = new ProcessBuilder(

Hi在尝试使用via java ProcessBuilder命令构造路径运行bash命令时遇到问题

由于文件未找到错误,我决定不使用Runtime.getRuntime().exec(命令)。发现这是因为它天真地试图解析命令

我要执行的bash命令是

ffmpeg -i shortWav.wav -af silenceremove=1:0:-50dB shortWavCued.mp3
在传递命令时,我尝试了一种变体

ProcessBuilder pb = new ProcessBuilder("ffmpeg", "-i " + source + "-af" + "silenceremove" +"1", "0" + "-50dB" + target);
bash命令中我一直坚持的部分是

silenceremove=1:0:-50dB

旁白:您实际上并没有试图运行bash命令。bash是一个shell,
ProcessBuilder
不是shell,也不是自动运行shell(就像C的
system()
一样),尽管您可以显式运行shell。您正在尝试以shell命令运行带参数的相同程序的方式运行带参数的程序

bash通过在无引号的空白处拆分(在某些情况下不在此处进行修改)而形成的程序的每个参数必须是ProcessBuilder的单独参数,并且当您希望在一个参数中使用标点符号时,必须提供它。一种可能性:

new ProcessBuilder("ffmpeg" , "-i" , source , "-af" , "silenceremove=" + "1" + ":0" + ":-50db" , target)
# extra spaces around , and + added for clarity can be removed if you prefer
类似于
“消音器移动”+“=”
。。。也有可能


虽然许多命令不能与
Runtime.exec
的原始解析(在所有空格处中断,而不仅仅是不带引号的)一起使用,但这一个应该有。

是的,很抱歉,我知道bash不是一个命令。很晚了,我很累。我会试试看。谢谢