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'.
所以我们到达了我们遇到第一个空白的地方,然后失败了。