2010-07-06 192 views
5

我想通過在Linux上的exec調用運行ffmpeg。但是我必須在命令中使用引號(ffmpeg需要它)。我一直在尋找processbuilder和exec的java文檔和stackoverflow上的問題,但我似乎無法找到解決方案。Java Runtime.getRuntime()。exec()用引號

我需要運行

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"; 

任何幫助將不勝感激。

回答

6

製作一個數組!

EXEC可以採取串,其被用作命令&參數數組(相對於命令的數組)

像這樣的陣列...

String[] arguments = new String[] { "ffmpeg", 
"-i", 
"rtmp://127.0.0.1/vod/sample start=1500 stop=24000", 
"-re", 
... 
}; 
+0

您可以刪除字符 「新的String []」;大括號會自動爲你產生一個字符串數組。 – 2010-07-06 21:08:11

+1

這不會起作用 rtmp://127.0.0.1/vod/sample start = xxx stop = xxx 必須有引號。將參數放在字符串數組中並沒有幫助。 – 2010-07-06 21:31:31

+0

對不起,如果您放置轉義引號,它沒有幫助,如下所示:「\」rtmp://127.0.0.1/vod/sample start = 1500 stop = 24000 \「」 – laher 2010-07-06 21:57:18

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"; 
相關問題