Você não está dando as opções corretas de linha de comando para o programa.
ProcessBuilder
recebe uma lista de strings, então você precisa dividi-las:
new ProcessBuilder("ffmpeg", "-i", "filename");
sempre que eu corro ffmpeg -i filename
, ele retorna algo assim:
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2010-07-16 18:33:45
Duration: 00:00:24.00, start: 0.000000, bitrate: 2443 kb/s
Stream #0:0(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s
Metadata:
creation_time : 2010-07-16 18:33:45
handler_name : Mainconcept MP4 Sound Media Handler
Stream #0:1(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 2311 kb/s, 30 fps, 30 tbr, 30k tbn, 60 tbc
Metadata:
creation_time : 2010-07-16 18:33:46
handler_name : Mainconcept MP4 Video Media Handler
Exceto quando eu executo a partir de java usando:
ProcessBuilder pb = new ProcessBuilder(execS);
pb.redirectErrorStream(true);
try{
Process p = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String bs = "";
while(br.readLine() != null){
bs += br.readLine();
bs += "\n";
}
return bs;
}catch(IOException e){
e.printStackTrace();
}
isso me dá isso:
built on Jun 17 2013 23:20:06 with gcc 4.6 (GCC)
Metadata:
minor_version : 0
creation_time : 2010-07-16 18:33:45
Stream #0:0(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s
creation_time : 2010-07-16 18:33:45
Stream #0:1(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 2311 kb/s, 30 fps, 30 tbr, 30k tbn, 60 tbc
creation_time : 2010-07-16 18:33:46
At least one output file must be specified
Alguém pode me dizer o que estou fazendo de errado?
Você não está dando as opções corretas de linha de comando para o programa.
ProcessBuilder
recebe uma lista de strings, então você precisa dividi-las:
new ProcessBuilder("ffmpeg", "-i", "filename");
Tente criar um novo segmento e processar o fluxo de erros do processo simultaneamente; p.getErrorStream ()
O FFMPEG envia muitos dados para o fluxo de erros; e por não processá-lo, o buffer de InputStream do erro é preenchido lá, o qual então trava o processo do FFMPEG até sua leitura.