1
我這樣做:ProcessBuilder構造函數參數如何工作?
String[] command = {ffmpegLoc+"ffmpeg.exe",
"-i ",
"\""+dir+params.getString(4)+".flv"+"\"",
"-copyts",
"-crf 18",
"-profile:v baseline",
"-level 3.0",
"-pix_fmt yuv420p",
"-preset veryslow",
"\""+dir+params.getString(4)+".mp4"+"\""};
try {
getLogger().info("ffmpeg command " + command);
ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectErrorStream(true);
getLogger().info("Starting process");
Process process = builder.start();
InputStream stream = process.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while((line = in.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
而且我得到的ffmpeg這個錯誤,它正確初始化:
Unrecognized option 'i '.
Error splitting the argument list: Option not found
所以我想:「也許我並不需要每個參數拆分爲數組」
所以我替換此命令:
String[] command = {ffmpegLoc+"ffmpeg.exe",
"-i " + "\""+dir+params.getString(4)+".flv"+"\"" + " -copyts -crf 18 -profile:v baseline -level 3.0 -pix_fmt yuv420p -preset veryslow "+"\""+dir+params.getString(4)+".mp4"+"\""};
現在我得到這樣的:
Unrecognized option 'i C:/Program'.
Error splitting the argument list: Option not found
什麼i
發生之前到該連字符?
這些雙引號將路徑包裝到.flv文件中發生了什麼?
這到底是怎麼回事?
編輯:
我放棄了逃脫雙引號,按照this答案,現在我得到這樣的:
Unrecognized option 'i C:/Program Files (x86)/Wowza Media Systems/Wowza Streaming Engine 4.1.0/content/recorder/vid_test001.flv -copyts -crf 18 -profile:v baseline -level 3.0 -pix_fmt yuv420p -preset veryslow C:/Program Files (x86)/Wowza Media Systems/Wowza Streaming Engine 4.1.0/content/recorder/vid_test001.mp4'.
Error splitting the argument list: Option not found
又在i
前面是連字符缺失。
編輯2:
讓我們將它們合併:沒有逃脫雙引號與參數結合各自在自己的索引:
String[] command = {ffmpegLoc+"ffmpeg.exe",
"-i",
dir+params.getString(4)+".flv",
"-copyts",
"-crf 18",
"-profile:v baseline",
"-level 3.0",
"-pix_fmt yuv420p",
"-preset veryslow",
dir+params.getString(4)+".mp4"};
的ffmpeg現在給我:
Unrecognized option 'crf 18'.
所以我們到達了我們遇到第一個空白的地方,然後失敗了。