带有引号的Java Runtime.getRuntime().exec()

Sla*_*yev 6 java linux exec runtime.exec

我试图通过Linux上的exec调用运行ffmpeg.但是我必须在命令中使用引号(ffmpeg需要它).我一直在浏览java doc for processbuilder和exec以及stackoverflow上的问题,但我似乎无法找到解决方案.

我需要跑

ffmpeg -i "rtmp://127.0.0.1/vod/sample start=1500 stop=24000" -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv
Run Code Online (Sandbox Code Playgroud)

我需要在下面的参数字符串中插入引号.注意,由于processbuilder解析和运行命令的性质,简单地添加单引号或双引号前面加一个反斜杠不起作用.

String argument = "ffmpeg -i rtmp://127.0.0.1/vod/"
                    + nextVideo.getFilename()
                    + " start=" + nextVideo.getStart()
                    + " stop=" + nextVideo.getStop()
                    + " -re -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/qltv";
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

lah*_*her 6

做一个阵列!

exec可以接受一个字符串数组,这些字符串用作命令和参数数组(与命令数组相对)

像这样......

String[] arguments = new String[] { "ffmpeg", 
"-i", 
"rtmp://127.0.0.1/vod/sample start=1500 stop=24000",
"-re",
...
};
Run Code Online (Sandbox Code Playgroud)

  • 与此同时,你总是可以通过将调用包装在shell脚本中来简化调用(期望args $ 1,$ 2,$ 3) (2认同)