나는 파일을 분할하기 위해 mencoder
을 사용하고 있으며 가능한 경우이를 사용하여 객체 지향 접근 방식으로 바꾸고 싶습니다. 그러나 나는 최선의 방법이 확실하지 않으므로 공개적으로 남겨 둡니다. 다음은 내가 필요한 것입니다.터미널 명령을 반복적으로 호출하는 가장 좋은 방법
시작 시간과 종료 시간이있는 Excel 파일이 있고 비디오 파일에서 적절한 클립을 추출해야합니다. 터미널에서 내가 예를 들어, 사용 성공 했어 (I 맥 OS X에있어) : 비디오 MyVideo.avi의 첫 번째 10 초 클리핑하여 비디오 Output.avi를 생성
mencoder -ss 0 -endpos 10 MyVideo.avi -oac copy -ovc copy -o Output.avi
합니다.
하지만 내가 말했듯이, 프로그램이 엑셀 파일을 읽어 들이고이 mencoder 명령을 시작 시간과 종료 시간 각각에 대해 여러 번 (100 이상) 호출하려고합니다.
나는 자바로 엑셀 파일을 읽는 법을 알고 있지만, 자바에서이 명령을 호출하는 것이 가장 좋은 것인지 잘 모르겠습니다. 또한, mencoder
의 출력을 볼 수 있기를 원합니다 (왜냐하면 좋은 백분율을 출력하므로 단일 명령이 얼마나 오래 걸릴지 알 수 있기 때문입니다). 쉘 스크립트에서 이런 유형의 작업이 가능합니까? 가능하다면 really
은 Java를 사용하고 싶습니다. Java에서 수년 간의 경험과 쉘 스크립팅 경험이 없기 때문에 가능합니다.
UPDATE 여기
내가 자바 시도했다, 그러나 내가 mencoders 멀티 코어 기능에 대해 매우 확실하지 않다 in.readLine()
File wd = new File("/bin");
System.out.println(wd);
Process proc = null;
try {
proc = Runtime.getRuntime().exec("/bin/bash", null, wd);
}
catch (IOException e) {
e.printStackTrace();
}
if (proc != null) {
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
out.println("cd ..");
out.println("pwd");
String video = "/Users/MyFolder/MyFile.avi";
String output = "/Users/MyFolder/output.avi";
int start = 0;
int end = 6;
String cmd = "mencoder -ss " + start +
" -endpos " + end +
" " + video + " -oac copy -ovc copy -o " + output;
out.println(cmd);
try {
String line;
System.out.println("top");
while ((line = in.readLine()) != null) {
System.out.println(line);
}
System.out.println("end");
proc.waitFor();
in.close();
out.close();
proc.destroy();
}
catch (Exception e) {
e.printStackTrace();
}
}
아,이 작업에는 충분하지 않은 프로세스입니까? – giorashc
자바에서 성공하지 못했습니다. – CodeGuy
안녕하세요 @ 코드가 왜 입력 스트림을 사용하고 출력 스트림을 사용하지 않으십니까? 내 말은 출력을보고 입력 스트림이 입력을 기다릴 것이므로 루프가 끝나지 않는 이유를 생각할 것입니다. – giorashc