2012-12-20 139 views
2

我正在用Java編寫Java Swing應用程序,作爲ffmpeg命令的前端。它從用戶輸入文件夾和文件名,並添加更多不斷顯示在JTextField中的參數。用戶可以在即將調用的文本字段中編輯最終命令。通過Java,Windows/Linux中的Runtime.getRunTime.exec()獲取路徑名,文件名

這適用於Windows和Linux:

Process ffmpeg = Runtime.getRuntime().exec(command, null, new File(current_working_folder)); 

命令是一個字符串。它的格式取決於操作系統,因此路徑總是全部給出(絕對路徑),斜槓適合給定的操作系統。

在Windows和Linux中,可以通過在「....」中包含文件夾和文件名來執行ffmpeg命令。在Windows中,此格式最終通過Runtime.getRunTime.exec()工作。

但是,在Linux中,這通過Runtime.getRunTime.exec()不起作用。引號可能被誤解爲「......」。

對此有何建議?

+0

,能得到任何異常? – Suranga

回答

2

嘗試將您的命令作爲數組傳遞,而不是使用此方法的字符串:Runtime.exec(String[] cmdarray, String[] envp, File dir)

例如,而不是:

Runtime.getRuntime().exec("ffmpeg -i video_origine.avi video_finale.mpg", null, new File(current_working_folder)); 

使用:

Runtime.getRuntime().exec(new String[]{"ffmpeg", "-i", "video_origine.avi", "video_finale.mpg"}, null, new File(current_working_folder)); 
+0

我只想使用一個字符串,因爲我試圖在最常見的情況下和所有操作系統上完成功能。 – GianniTee

+0

這是一個測試。 ffmpeg -f image2 -r 16 -i「/ home/neuron/IdeaProjects/Perceptron/animations/HeLL的新文件夾666,folder/frame%d.tga」「/ home/neuron/IdeaProjects/Perceptron/movies/jk 904。 0. 02.1lk .folder/my mkvmovie.mkv「請注意我們如何在路徑/文件名中包含空格,並將它們全部放在引號中。這可以在Windows和Linux控制檯中使用,但不能在Linux中使用java Runtime.getRuntime()。exec()。在一般情況下,如果路徑/文件名稱與我試圖製作的一樣複雜,那麼很難創建一個字符串數組。 – GianniTee

+0

[Stderr] [image2 @ 0xa2c99a0]找不到帶路徑'/ home/neuron/IdeaProjects/Perceptron/animations/New'的文件,索引範圍爲0-4 [Stderr]「/ home/neuron/IdeaProjects/Perceptron /動畫/新:沒有這樣的文件或目錄 – GianniTee