Problema de metadados do FFMpeg

0

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?

    
por AUser 16.10.2013 / 01:06

2 respostas

1

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");
    
por 16.10.2013 / 03:16
0

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.

    
por 19.11.2013 / 14:48