ffmpeg ProcessBuilder Нет такого файла или каталога - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь получить продолжительность мультимедиа с помощью команды ffmpeg из программы java. Я вызываю этот метод из весеннего загрузочного приложения. Я использую ProcessBuilder.

Объект файла действителен и существует для конфиденциальности. Я заменил путь к файлу в журналах ошибок.

Мой код указан ниже:

private String getMediaDuration(File file) {
        final String command = "/usr/bin/ffmpeg -version";//-i " + file.getAbsolutePath() + " 2>&1 | grep Duration | cut -c 13-20";
        try {
            ProcessBuilder builder = new ProcessBuilder("/usr/bin/ffmpeg",
                    "-version");
            builder.directory(file.getParentFile());

            System.out.println("Directory : " + builder.directory().exists());
            System.out.println("Directory : " + builder.directory().getAbsolutePath());
            final Process process = builder.start();
            final InputStream is = process.getInputStream();
            final InputStreamReader isr = new InputStreamReader(is);
            final BufferedReader br = new BufferedReader(isr);
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            return line;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

К сожалению, похоже, что ничего не работает. Ошибка ниже:

java.io.IOException: Cannot run program "/usr/bin/ffmpeg -version" (in directory "/abc/xyz"): error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at ....getMediaDuration(FFmpegRunner.java:208)
    at ....ffmpegprocessor.FFmpegRunner.run(FFmpegRunner.java:61)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 5 more

Вывод для whereis ffmpeg

ffmpeg: /usr/bin/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz

Пожалуйста, помогите мне понять, в чем проблема. Спасибо.

...