Ведение журнала FFmpeg не работает после запуска команды java - PullRequest
0 голосов
/ 14 апреля 2020

Когда я запускаю следующий код:

Runtime rt = Runtime.getRuntime();
rt.exec("ffmpeg -I /path/to/video/kot.mp4 /path/to/picsdir/img%04d.jpeg 2> /path/to/log.log");

Эта команда выполняется в терминале, как и ожидалось, проблема в том, что она не работает из кода java. Именно логирование! Пожалуйста помоги! Спасибо!

1 Ответ

0 голосов
/ 15 апреля 2020

Runtime.getRuntime (). Exe c не является интерпретатором оболочки. Если вы работаете как интерпретатор оболочки, тогда вы должны запустить интерпретатор следующим образом:

Runtime rt = Runtime.getRuntime();
Process p = rt.exec(new String[]{"/bin/sh", "-c", "ffmpeg -I /path/to/video/kot.mp4 /path/to/picsdir/img%04d.jpeg 2> /path/to/log.log"});
try (InputStream in = p.getInputStream();
        InputStream err = p.getErrorStream();
        OuputStream out = p.getOutputStream()) {
    p.waitFor(); //wait for job to complete before destroying it.
} finally {
    p.destroy(); //cleanup resources and abort
}

Этот пример обновлен, чтобы не отставать от JDK-4801027: Уточнение необходимости вызывать Process.destroy и JDK-6462165: гигиена дескриптора файла процесса проповеди

В противном случае используйте ProcessBuilder для запуска ffmpeg и в Java переназначьте выходной поток в файл журнала.

...