2015-06-09 1 views
4

Я запускаю команду ffmpeg для генерации видео для заданных изображений (img001.jpg, img002.jpg ...), он создает слайд.mp4, но он бесконечно ждет:Выполнение команды ffmpeg в java Процесс зависает в waitFor()

public class Ffmpeg { 

public static void main(String[] args) throws IOException, InterruptedException { 
    String path = "E:\\pics\\Santhosh\\FadeOut\\testing";  
    String cmd = "ffmpeg -r 1/5 -i img%03d.jpg -c:v libx264 -r 30 -y -pix_fmt yuv420p slide.mp4"; 
    runScript (path, cmd); 
} 

private static boolean runScript(String path, String cmd) throws IOException, InterruptedException {  
    List<String> commands = new ArrayList<String>(); 
    commands.add("cmd"); 
    commands.add("/c"); 
    commands.add(cmd); 
    ProcessBuilder pb = new ProcessBuilder(commands); 
    pb.directory(new File(path)); 
    pb.redirectErrorStream(true); 
    Process process = pb.start(); 
    flushInputStreamReader(process);     
    int exitCode = process.waitFor(); 
    return exitCode == 0; 
}  
} 

private static void flushInputStreamReader (Process process) throws IOException, InterruptedException { 
      BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); 
      String line=null; 
      StringBuilder s = new StringBuilder(); 
      while((line=input.readLine()) != null) {    
       s.append(line); 
      } 
     } 

Любые предложения?

После написания функции flushInputStreamReader, его работы

+0

Если память хорошо работает, я думаю, что проблема в материале InputStreamReader, или вы должны их прочитать или отключить. – nafas

+0

Кстати, просто сделайте system.out.println («hello»); после runScript (путь, cmd); – nafas

+0

Привет @nafas после вставки system.out.println ("hello"); его не работает, как связал это с InputStreamReader? –

ответ

0

Помимо чтения ErrorStream, есть лучший способ справиться с этим.

Добавьте команду -loglevel quiet, чтобы ErrorStream не переполнил и не заблокировал процесс в первую очередь.

Смежные вопросы