всякий раз, когда я запускаю ffmpeg -i filename он возвращает что-то вроде этого:

  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

За исключением случаев, когда я запускаю его из Java с помощью:

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();
    }

это дает мне это:

      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

Кто-нибудь может сказать мне, что я делаю не так?

2 ответа2

1

Вы не даете правильные параметры командной строки для программы.

ProcessBuilder принимает список строк, поэтому вам нужно разделить их:

new ProcessBuilder("ffmpeg", "-i", "filename");
0

Попробуйте создать новый поток и обработать поток ошибок процесса одновременно; p.getErrorStream()

FFMPEG отправляет много своих данных в поток ошибок; и не обрабатывая его, там заполняется буфер InputStream с ошибкой, который затем останавливает процесс FFMPEG до его чтения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .