我正在尝试将音频从一种格式转换为:使用test.mpga
库将test.ogg
转换为ffmpeg
。我有这个目录结构:
TestConvert
ffmpeg
ffmpeg.exe
ffplay.exe
ffprobe.exe
audio
test.mpga
src
main
java
somepackage
utils
Utils <--- CmdTest run from here
这是我的代码:
class CmdTest {
public static void main(String[] args) throws Exception {
String path = "C:\\...\\TestConvert";
Process p = Runtime.getRuntime().exec( path + "/ffmpeg/ffmpeg.exe -i " + path + "\\audio\\test.mpga " + path + "\\audio\\test.ogg");
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
}
}
但是,当我运行它时,它不打印任何内容,并以退出代码0
退出。 test.ogg
似乎没有出现在任何地方。我在做什么错?
我也想知道是否可以从资源文件夹中获取该文件?
EDIT:我尝试使用ProcessBuilder
,但它仍然没有创建test.ogg
文件并打印不可读的内容:
"C:\Program" �� ���� ����७��� ��� ���譥�
��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", path +
"/ffmpeg/ffmpeg.exe -i " + path +
"/audio/test.mpga" + path + "/audio/test.ogg");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
同时将cd
和ffmpeg.exe
放在目录中,然后将test.mpga
放入其中,然后运行它:
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd " + path + "\\ffmpeg &&" +
"ffmpeg -i test.mpga test.ogg");
[潜在地,我希望它们都可以在罐子中工作,所以我真的很希望能够从资源中获取.exe和.mpga。
编辑:
这也不起作用:
ProcessBuilder builder = new ProcessBuilder(
path + "/ffmpeg/ffmpeg.exe",
"ffmpeg -i " + path + "/audio/test.mpga " + path + "/audio/test.ogg");
我尝试使用ProcessBuilder,但是它仍然没有创建test.ogg文件
好吧,您需要花更多时间阅读JavaDocs。
ProcessBuilder
和Runtime.exec
都使您能够将命令和参数作为单独的元素进行传递。
这消除了命令(或参数)中“空格”的问题,您将不必逃避这些问题。
代替...
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", path +
"/ffmpeg/ffmpeg.exe -i " + path +
"/audio/test.mpga" + path + "/audio/test.ogg");
您可能会使用更多类似...
ProcessBuilder builder = new ProcessBuilder();
builder.command(path + "/ffmpeg/ffmpeg.exe",
"-i",
path + "/audio/test.mpga",
path + "/audio/test.ogg");
builder.redirectErrorStream(true);
您还可以使用builder.directory(new File(path));
更改工作目录,这可能会使构建命令更容易