我试图通过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
我需要在下面的参数字符串中插入引号。注意,由于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";
非常感谢任何帮助。
答案 0 :(得分:6)
制作阵列!
exec可以接受一个字符串数组,这些字符串用作命令数组&参数(与命令数组相对)
像这样......
String[] arguments = new String[] { "ffmpeg",
"-i",
"rtmp://127.0.0.1/vod/sample start=1500 stop=24000",
"-re",
...
};
答案 1 :(得分:1)
听起来你需要在参数字符串中转义引号。这很简单,可以使用前面的反斜杠。
E.g。
String containsQuote = "\"";
这将评估为仅包含引号字符的字符串。
或者在您的特定情况下:
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";