【发布时间】:2014-09-20 04:59:13
【问题描述】:
我正在这样做:
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'.
所以我们到达了遇到第一个空格的地方,然后失败了。
【问题讨论】: