Я пытаюсь преобразовать звук из одного формата в другой: 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
, кажется, нигде не появляется. Что я делаю не так?
Мне также было интересно, можно ли взять этот файл из папки ресурсов?
РЕДАКТИРОВАТЬ : я пытался использовать 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");